





from __future__ import annotations

import unittest

from transformers import BlenderbotConfig, BlenderbotTokenizer, is_tf_available
from transformers.testing_utils import require_tf, require_tokenizers, slow
from transformers.utils import cached_property

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
				import tensorflow as tf

				from transformers import TFAutoModelForSeqaSeqLM, TFBlenderbotForConditionalGeneration, TFBlenderbotModel







@require_tf
class   _UpperCamelCase  :







					'''simple docstring'''

					lowerCamelCase     :     Dict			    =       BlenderbotConfig
					lowerCamelCase     :     Tuple			    =       {}
					lowerCamelCase     :     Optional[int]			    =       'gelu'





					def __init__(						self    :  Dict ,					__lowercase    :  Dict ,					__lowercase    :  Optional[Any]=13 ,					__lowercase    :  Optional[int]=7 ,					__lowercase    :  List[Any]=True ,					__lowercase    :  List[Any]=False ,					__lowercase    :  str=99 ,					__lowercase    :  Union[str, Any]=32 ,					__lowercase    :  List[Any]=2 ,					__lowercase    :  Optional[Any]=4 ,					__lowercase    :  Optional[Any]=37 ,					__lowercase    :  List[Any]=0.1 ,					__lowercase    :  Optional[int]=0.1 ,					__lowercase    :  Optional[int]=20 ,					__lowercase    :  Dict=2 ,					__lowercase    :  Tuple=1 ,					__lowercase    :  List[str]=0 ,					):






						'''simple docstring'''







						UpperCAmelCase_								=     parent
						UpperCAmelCase_								=     batch_size
						UpperCAmelCase_								=     seq_length
						UpperCAmelCase_								=     is_training
						UpperCAmelCase_								=     use_labels
						UpperCAmelCase_								=     vocab_size
						UpperCAmelCase_								=     hidden_size
						UpperCAmelCase_								=     num_hidden_layers
						UpperCAmelCase_								=     num_attention_heads
						UpperCAmelCase_								=     intermediate_size

						UpperCAmelCase_								=     hidden_dropout_prob
						UpperCAmelCase_								=     attention_probs_dropout_prob
						UpperCAmelCase_								=     max_position_embeddings
						UpperCAmelCase_								=     eos_token_id
						UpperCAmelCase_								=     pad_token_id
						UpperCAmelCase_								=     bos_token_id





					def        SCREAMING_SNAKE_CASE							(						self    :  Tuple		):






						'''simple docstring'''







						UpperCAmelCase_								=     ids_tensor([self.batch_size, self.seq_length - 1] ,					self.vocab_size		)
						UpperCAmelCase_								=     tf.expand_dims(tf.constant([self.eos_token_id] * self.batch_size		) ,					1		)
						UpperCAmelCase_								=     tf.concat([input_ids, eos_tensor] ,					axis=1		)

						UpperCAmelCase_								=     ids_tensor([self.batch_size, self.seq_length] ,					self.vocab_size		)

						UpperCAmelCase_								=     self.config_cls(
						    vocab_size=self.vocab_size ,					d_model=self.hidden_size ,					encoder_layers=self.num_hidden_layers ,					decoder_layers=self.num_hidden_layers ,					encoder_attention_heads=self.num_attention_heads ,					decoder_attention_heads=self.num_attention_heads ,					encoder_ffn_dim=self.intermediate_size ,					decoder_ffn_dim=self.intermediate_size ,					dropout=self.hidden_dropout_prob ,					attention_dropout=self.attention_probs_dropout_prob ,					max_position_embeddings=self.max_position_embeddings ,					eos_token_ids=[2] ,					bos_token_id=self.bos_token_id ,					pad_token_id=self.pad_token_id ,					decoder_start_token_id=self.pad_token_id ,					**self.config_updates ,					)
						UpperCAmelCase_								=     prepare_blenderbot_inputs_dict(__lowercase ,					__lowercase ,					__lowercase		)
						return config, inputs_dict





					def        SCREAMING_SNAKE_CASE							(						self    :  List[Any] ,					__lowercase    :  Union[str, Any] ,					__lowercase    :  List[str]		):






						'''simple docstring'''







						UpperCAmelCase_								=     TFBlenderbotModel(config=__lowercase		).get_decoder()
						UpperCAmelCase_								=     inputs_dict['input_ids']

						UpperCAmelCase_								=     input_ids[:1, :]
						UpperCAmelCase_								=     inputs_dict['attention_mask'][:1, :]
						UpperCAmelCase_								=     inputs_dict['head_mask']
						UpperCAmelCase_								=     1

						# first forward pass
						UpperCAmelCase_								=     model(__lowercase ,					attention_mask=__lowercase ,					head_mask=__lowercase ,					use_cache=__lowercase		)

						UpperCAmelCase_								=     outputs.to_tuple()

						# create hypothetical next token and extent to next_input_ids
						UpperCAmelCase_								=     ids_tensor((self.batch_size, 3) ,					config.vocab_size		)
						UpperCAmelCase_								=     tf.cast(ids_tensor((self.batch_size, 3) ,					2		) ,					tf.inta		)

						# append to next input_ids and
						UpperCAmelCase_								=     tf.concat([input_ids, next_tokens] ,					axis=-1		)
						UpperCAmelCase_								=     tf.concat([attention_mask, next_attn_mask] ,					axis=-1		)

						UpperCAmelCase_								=     model(__lowercase ,					attention_mask=__lowercase		)[0]
						UpperCAmelCase_								=     model(__lowercase ,					attention_mask=__lowercase ,					past_key_values=__lowercase		)[0]

						self.parent.assertEqual(next_tokens.shape[1] ,					output_from_past.shape[1]		)

						# select random slice
						UpperCAmelCase_								=     int(ids_tensor((1,) ,					output_from_past.shape[-1]		)		)
						UpperCAmelCase_								=     output_from_no_past[:, -3:, random_slice_idx]
						UpperCAmelCase_								=     output_from_past[:, :, random_slice_idx]

						# test that outputs are equal for slice
						tf.debugging.assert_near(__lowercase ,					__lowercase ,					rtol=1e-3		)




def    A_(			A				,      A				,      A				,      A=None				,      A=None				,      A=None				,      A=None				,      A=None				,      ):




	if attention_mask is None:
		UpperCAmelCase_								=     tf.cast(tf.math.not_equal(__lowercase				,      config.pad_token_id   )				,      tf.inta   )
	if decoder_attention_mask is None:
		UpperCAmelCase_								=     tf.concat(
		    [
		        tf.ones(decoder_input_ids[:, :1].shape				,      dtype=tf.inta   ),
		        tf.cast(tf.math.not_equal(decoder_input_ids[:, 1:]				,      config.pad_token_id   )				,      tf.inta   ),
		    ]				,      axis=-1				,      )
	if head_mask is None:
		UpperCAmelCase_								=     tf.ones((config.encoder_layers, config.encoder_attention_heads)   )
	if decoder_head_mask is None:
		UpperCAmelCase_								=     tf.ones((config.decoder_layers, config.decoder_attention_heads)   )
	if cross_attn_head_mask is None:
		UpperCAmelCase_								=     tf.ones((config.decoder_layers, config.decoder_attention_heads)   )
	return {
	    "input_ids": input_ids,
	    "decoder_input_ids": decoder_input_ids,
	    "attention_mask": attention_mask,
	    "decoder_attention_mask": decoder_attention_mask,
	    "head_mask": head_mask,
	    "decoder_head_mask": decoder_head_mask,
	    "cross_attn_head_mask": cross_attn_head_mask,
	}







@require_tf
class   _UpperCamelCase  (       __A						,       __A						,       unittest.TestCase  ):







					'''simple docstring'''

					lowerCamelCase     :     str			    =       (TFBlenderbotForConditionalGeneration, TFBlenderbotModel) if is_tf_available() else ()
					lowerCamelCase     :     Optional[Any]			    =       (TFBlenderbotForConditionalGeneration,) if is_tf_available() else ()
					lowerCamelCase     :     Tuple			    =       (
					    {
					        'conversational': TFBlenderbotForConditionalGeneration,
					        'feature-extraction': TFBlenderbotModel,
					        'summarization': TFBlenderbotForConditionalGeneration,
					        'text2text-generation': TFBlenderbotForConditionalGeneration,
					        'translation': TFBlenderbotForConditionalGeneration,
					    }
					    if is_tf_available()
					    else {}
					)
					lowerCamelCase     :     Tuple			    =       True
					lowerCamelCase     :     Tuple			    =       False
					lowerCamelCase     :     Any			    =       False





					def        SCREAMING_SNAKE_CASE							(						self    :  List[Any]		):






						'''simple docstring'''







						UpperCAmelCase_								=     TFBlenderbotModelTester(self		)
						UpperCAmelCase_								=     ConfigTester(self ,					config_class=__lowercase		)





					def        SCREAMING_SNAKE_CASE							(						self    :  Dict		):






						'''simple docstring'''







						self.config_tester.run_common_tests()





					def        SCREAMING_SNAKE_CASE							(						self    :  Optional[Any]		):






						'''simple docstring'''







						UpperCAmelCase_								=     self.model_tester.prepare_config_and_inputs_for_common()
						self.model_tester.check_decoder_model_past_large_inputs(*__lowercase		)







@require_tokenizers
@require_tf
class   _UpperCamelCase  (       unittest.TestCase  ):







					'''simple docstring'''

					lowerCamelCase     :     Any			    =       ['My friends are cool but they eat too many carbs.']
					lowerCamelCase     :     List[str]			    =       'facebook/blenderbot-400M-distill'





					@cached_property
					def        SCREAMING_SNAKE_CASE							(						self    :  Any		):






						'''simple docstring'''







						return BlenderbotTokenizer.from_pretrained(self.model_name		)





					@cached_property
					def        SCREAMING_SNAKE_CASE							(						self    :  Dict		):






						'''simple docstring'''







						UpperCAmelCase_								=     TFAutoModelForSeqaSeqLM.from_pretrained(self.model_name		)
						return model





					@slow
					def        SCREAMING_SNAKE_CASE							(						self    :  int		):






						'''simple docstring'''







						UpperCAmelCase_								=     self.tokenizer(self.src_text ,					return_tensors="""tf"""		)
						UpperCAmelCase_								=     self.model.generate(
						    model_inputs.input_ids ,					)
						UpperCAmelCase_								=     self.tokenizer.batch_decode(generated_ids.numpy() ,					skip_special_tokens=__lowercase		)[0]
						assert (
						    generated_words
						    == " That's unfortunate. Are they trying to lose weight or are they just trying to be healthier?"
						)









import json
import os
import shutil
import tempfile
import unittest

import numpy as np
import pytest

from transformers import BertTokenizer, BertTokenizerFast
from transformers.models.bert.tokenization_bert import VOCAB_FILES_NAMES
from transformers.testing_utils import require_vision
from transformers.utils import FEATURE_EXTRACTOR_NAME, is_vision_available


if is_vision_available():
				from PIL import Image

				from transformers import ChineseCLIPImageProcessor, ChineseCLIPProcessor







@require_vision
class   _UpperCamelCase  (       unittest.TestCase  ):







					'''simple docstring'''

					def        SCREAMING_SNAKE_CASE							(						self    :  List[Any]		):






						'''simple docstring'''







						UpperCAmelCase_								=     tempfile.mkdtemp()

						UpperCAmelCase_								=     [
						    """[UNK]""",
						    """[CLS]""",
						    """[SEP]""",
						    """[PAD]""",
						    """[MASK]""",
						    """的""",
						    """价""",
						    """格""",
						    """是""",
						    """15""",
						    """便""",
						    """alex""",
						    """##andra""",
						    """，""",
						    """。""",
						    """-""",
						    """t""",
						    """shirt""",
						]
						UpperCAmelCase_								=     os.path.join(self.tmpdirname ,					VOCAB_FILES_NAMES["""vocab_file"""]		)
						with open(self.vocab_file ,					"""w""" ,					encoding="""utf-8"""		) as vocab_writer:
							vocab_writer.write("""""".join([x + """\n""" for x in vocab_tokens]		)		)

						UpperCAmelCase_								=     {
						    """do_resize""": True,
						    """size""": {"""height""": 2_24, """width""": 2_24},
						    """do_center_crop""": True,
						    """crop_size""": {"""height""": 18, """width""": 18},
						    """do_normalize""": True,
						    """image_mean""": [0.48145466, 0.4578275, 0.40821073],
						    """image_std""": [0.26862954, 0.26130258, 0.27577711],
						    """do_convert_rgb""": True,
						}
						UpperCAmelCase_								=     os.path.join(self.tmpdirname ,					__lowercase		)
						with open(self.image_processor_file ,					"""w""" ,					encoding="""utf-8"""		) as fp:
							json.dump(__lowercase ,					__lowercase		)





					def        SCREAMING_SNAKE_CASE							(						self    :  List[Any] ,					**__lowercase    :  Optional[Any]		):






						'''simple docstring'''







						return BertTokenizer.from_pretrained(self.tmpdirname ,					**__lowercase		)





					def        SCREAMING_SNAKE_CASE							(						self    :  Optional[Any] ,					**__lowercase    :  Optional[Any]		):






						'''simple docstring'''







						return BertTokenizerFast.from_pretrained(self.tmpdirname ,					**__lowercase		)





					def        SCREAMING_SNAKE_CASE							(						self    :  int ,					**__lowercase    :  int		):






						'''simple docstring'''







						return ChineseCLIPImageProcessor.from_pretrained(self.tmpdirname ,					**__lowercase		)





					def        SCREAMING_SNAKE_CASE							(						self    :  Any		):






						'''simple docstring'''







						shutil.rmtree(self.tmpdirname		)





					def        SCREAMING_SNAKE_CASE							(						self    :  Optional[int]		):






						'''simple docstring'''







						UpperCAmelCase_								=     [np.random.randint(2_55 ,					size=(3, 30, 4_00) ,					dtype=np.uinta		)]

						UpperCAmelCase_								=     [Image.fromarray(np.moveaxis(__lowercase ,					0 ,					-1		)		) for x in image_inputs]

						return image_inputs





					def        SCREAMING_SNAKE_CASE							(						self    :  List[Any]		):






						'''simple docstring'''







						UpperCAmelCase_								=     self.get_tokenizer()
						UpperCAmelCase_								=     self.get_rust_tokenizer()
						UpperCAmelCase_								=     self.get_image_processor()

						UpperCAmelCase_								=     ChineseCLIPProcessor(tokenizer=__lowercase ,					image_processor=__lowercase		)
						processor_slow.save_pretrained(self.tmpdirname		)
						UpperCAmelCase_								=     ChineseCLIPProcessor.from_pretrained(self.tmpdirname ,					use_fast=__lowercase		)

						UpperCAmelCase_								=     ChineseCLIPProcessor(tokenizer=__lowercase ,					image_processor=__lowercase		)
						processor_fast.save_pretrained(self.tmpdirname		)
						UpperCAmelCase_								=     ChineseCLIPProcessor.from_pretrained(self.tmpdirname		)

						self.assertEqual(processor_slow.tokenizer.get_vocab() ,					tokenizer_slow.get_vocab()		)
						self.assertEqual(processor_fast.tokenizer.get_vocab() ,					tokenizer_fast.get_vocab()		)
						self.assertEqual(tokenizer_slow.get_vocab() ,					tokenizer_fast.get_vocab()		)
						self.assertIsInstance(processor_slow.tokenizer ,					__lowercase		)
						self.assertIsInstance(processor_fast.tokenizer ,					__lowercase		)

						self.assertEqual(processor_slow.image_processor.to_json_string() ,					image_processor.to_json_string()		)
						self.assertEqual(processor_fast.image_processor.to_json_string() ,					image_processor.to_json_string()		)
						self.assertIsInstance(processor_slow.image_processor ,					__lowercase		)
						self.assertIsInstance(processor_fast.image_processor ,					__lowercase		)





					def        SCREAMING_SNAKE_CASE							(						self    :  int		):






						'''simple docstring'''







						UpperCAmelCase_								=     ChineseCLIPProcessor(tokenizer=self.get_tokenizer() ,					image_processor=self.get_image_processor()		)
						processor.save_pretrained(self.tmpdirname		)

						UpperCAmelCase_								=     self.get_tokenizer(cls_token="""(CLS)""" ,					sep_token="""(SEP)"""		)
						UpperCAmelCase_								=     self.get_image_processor(do_normalize=__lowercase		)

						UpperCAmelCase_								=     ChineseCLIPProcessor.from_pretrained(
						    self.tmpdirname ,					cls_token="""(CLS)""" ,					sep_token="""(SEP)""" ,					do_normalize=__lowercase		)

						self.assertEqual(processor.tokenizer.get_vocab() ,					tokenizer_add_kwargs.get_vocab()		)
						self.assertIsInstance(processor.tokenizer ,					__lowercase		)

						self.assertEqual(processor.image_processor.to_json_string() ,					image_processor_add_kwargs.to_json_string()		)
						self.assertIsInstance(processor.image_processor ,					__lowercase		)





					def        SCREAMING_SNAKE_CASE							(						self    :  Tuple		):






						'''simple docstring'''







						UpperCAmelCase_								=     self.get_image_processor()
						UpperCAmelCase_								=     self.get_tokenizer()

						UpperCAmelCase_								=     ChineseCLIPProcessor(tokenizer=__lowercase ,					image_processor=__lowercase		)

						UpperCAmelCase_								=     self.prepare_image_inputs()

						UpperCAmelCase_								=     image_processor(__lowercase ,					return_tensors="""np"""		)
						UpperCAmelCase_								=     processor(images=__lowercase ,					return_tensors="""np"""		)

						for key in input_feat_extract.keys():
							self.assertAlmostEqual(input_feat_extract[key].sum() ,					input_processor[key].sum() ,					delta=1e-2		)





					def        SCREAMING_SNAKE_CASE							(						self    :  Optional[Any]		):






						'''simple docstring'''







						UpperCAmelCase_								=     self.get_image_processor()
						UpperCAmelCase_								=     self.get_tokenizer()

						UpperCAmelCase_								=     ChineseCLIPProcessor(tokenizer=__lowercase ,					image_processor=__lowercase		)

						UpperCAmelCase_								=     """Alexandra，T-shirt的价格是15便士。"""

						UpperCAmelCase_								=     processor(text=__lowercase		)

						UpperCAmelCase_								=     tokenizer(__lowercase		)

						for key in encoded_tok.keys():
							self.assertListEqual(encoded_tok[key] ,					encoded_processor[key]		)





					def        SCREAMING_SNAKE_CASE							(						self    :  str		):






						'''simple docstring'''







						UpperCAmelCase_								=     self.get_image_processor()
						UpperCAmelCase_								=     self.get_tokenizer()

						UpperCAmelCase_								=     ChineseCLIPProcessor(tokenizer=__lowercase ,					image_processor=__lowercase		)

						UpperCAmelCase_								=     """Alexandra，T-shirt的价格是15便士。"""
						UpperCAmelCase_								=     self.prepare_image_inputs()

						UpperCAmelCase_								=     processor(text=__lowercase ,					images=__lowercase		)

						self.assertListEqual(list(inputs.keys()		) ,					["""input_ids""", """token_type_ids""", """attention_mask""", """pixel_values"""]		)

						# test if it raises when no input is passed
						with pytest.raises(__lowercase		):
							processor()





					def        SCREAMING_SNAKE_CASE							(						self    :  List[Any]		):






						'''simple docstring'''







						UpperCAmelCase_								=     self.get_image_processor()
						UpperCAmelCase_								=     self.get_tokenizer()

						UpperCAmelCase_								=     ChineseCLIPProcessor(tokenizer=__lowercase ,					image_processor=__lowercase		)

						UpperCAmelCase_								=     [[1, 4, 5, 8, 1, 0, 8], [3, 4, 3, 1, 1, 8, 9]]

						UpperCAmelCase_								=     processor.batch_decode(__lowercase		)
						UpperCAmelCase_								=     tokenizer.batch_decode(__lowercase		)

						self.assertListEqual(__lowercase ,					__lowercase		)





					def        SCREAMING_SNAKE_CASE							(						self    :  List[Any]		):






						'''simple docstring'''







						UpperCAmelCase_								=     self.get_image_processor()
						UpperCAmelCase_								=     self.get_tokenizer()

						UpperCAmelCase_								=     ChineseCLIPProcessor(tokenizer=__lowercase ,					image_processor=__lowercase		)

						UpperCAmelCase_								=     """Alexandra，T-shirt的价格是15便士。"""
						UpperCAmelCase_								=     self.prepare_image_inputs()

						UpperCAmelCase_								=     processor(text=__lowercase ,					images=__lowercase		)

						self.assertListEqual(list(inputs.keys()		) ,					processor.model_input_names		)


