



import json
import os
import shutil
import tempfile
import unittest

import numpy as np
import pytest

from transformers import CLIPTokenizer, CLIPTokenizerFast
from transformers.models.clip.tokenization_clip import VOCAB_FILES_NAMES
from transformers.testing_utils import require_vision
from transformers.utils import IMAGE_PROCESSOR_NAME, is_vision_available


if is_vision_available():
							from PIL import Image

							from transformers import CLIPSegProcessor, ViTImageProcessor


@require_vision
class   __lowerCAmelCase  (		unittest.TestCase   ):
					"""simple docstring"""






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






								"""simple docstring"""


								A__	  =     tempfile.mkdtemp()

								# fmt: off
								A__	  =     ['l', 'o', 'w', 'e', 'r', 's', 't', 'i', 'd', 'n', 'lo', 'l</w>', 'w</w>', 'r</w>', 't</w>', 'low</w>', 'er</w>', 'lowest</w>', 'newer</w>', 'wider', '<unk>', '<|startoftext|>', '<|endoftext|>']
								# fmt: on
								A__	  =     dict(zip(_snake_case					,       range(len(_snake_case       )       )       )       )
								A__	  =     ['#version: 0.2', 'l o', 'lo w</w>', 'e r</w>', '']
								A__	  =     {'unk_token': '<unk>'}

								A__	  =     os.path.join(self.tmpdirname					,       VOCAB_FILES_NAMES['vocab_file']       )
								A__	  =     os.path.join(self.tmpdirname					,       VOCAB_FILES_NAMES['merges_file']       )
								with open(self.vocab_file					,       'w'					,       encoding='utf-8'       ) as fp:
											fp.write(json.dumps(_snake_case       ) + '\n'       )
								with open(self.merges_file					,       'w'					,       encoding='utf-8'       ) as fp:
											fp.write('\n'.join(_snake_case       )       )

								A__	  =     {
								    'do_resize': True,
								    'size': 20,
								    'do_center_crop': True,
								    'crop_size': 18,
								    'do_normalize': True,
								    'image_mean': [0.4814_5466, 0.457_8275, 0.4082_1073],
								    'image_std': [0.2686_2954, 0.2613_0258, 0.2757_7711],
								}
								A__	  =     os.path.join(self.tmpdirname					,       _snake_case       )
								with open(self.image_processor_file					,       'w'					,       encoding='utf-8'       ) as fp:
											json.dump(_snake_case					,       _snake_case       )



					def      _a				(  self       :							Union[str, Any]					,       **_snake_case       :							Optional[int]       ):






								"""simple docstring"""


								return CLIPTokenizer.from_pretrained(self.tmpdirname					,       **_snake_case       )



					def      _a				(  self       :							Union[str, Any]					,       **_snake_case       :							Union[str, Any]       ):






								"""simple docstring"""


								return CLIPTokenizerFast.from_pretrained(self.tmpdirname					,       **_snake_case       )



					def      _a				(  self       :							List[str]					,       **_snake_case       :							int       ):






								"""simple docstring"""


								return ViTImageProcessor.from_pretrained(self.tmpdirname					,       **_snake_case       )



					def      _a				(  self       :							Dict       ):






								"""simple docstring"""


								shutil.rmtree(self.tmpdirname       )



					def      _a				(  self       :							List[Any]       ):






								"""simple docstring"""


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

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

								return image_inputs



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






								"""simple docstring"""


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

								A__	  =     CLIPSegProcessor(tokenizer=_snake_case					,       image_processor=_snake_case       )
								processor_slow.save_pretrained(self.tmpdirname       )
								A__	  =     CLIPSegProcessor.from_pretrained(self.tmpdirname					,       use_fast=_snake_case       )

								A__	  =     CLIPSegProcessor(tokenizer=_snake_case					,       image_processor=_snake_case       )
								processor_fast.save_pretrained(self.tmpdirname       )
								A__	  =     CLIPSegProcessor.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					,       _snake_case       )
								self.assertIsInstance(processor_fast.tokenizer					,       _snake_case       )

								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					,       _snake_case       )
								self.assertIsInstance(processor_fast.image_processor					,       _snake_case       )



					def      _a				(  self       :							Dict       ):






								"""simple docstring"""


								A__	  =     CLIPSegProcessor(tokenizer=self.get_tokenizer()					,       image_processor=self.get_image_processor()       )
								processor.save_pretrained(self.tmpdirname       )

								A__	  =     self.get_tokenizer(bos_token='(BOS)'					,       eos_token='(EOS)'       )
								A__	  =     self.get_image_processor(do_normalize=_snake_case					,       padding_value=1.0       )

								A__	  =     CLIPSegProcessor.from_pretrained(
								    self.tmpdirname					,       bos_token='(BOS)'					,       eos_token='(EOS)'					,       do_normalize=_snake_case					,       padding_value=1.0       )

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

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



					def      _a				(  self       :							List[str]       ):






								"""simple docstring"""


								A__	  =     self.get_image_processor()
								A__	  =     self.get_tokenizer()

								A__	  =     CLIPSegProcessor(tokenizer=_snake_case					,       image_processor=_snake_case       )

								A__	  =     self.prepare_image_inputs()

								A__	  =     image_processor(_snake_case					,       return_tensors='np'       )
								A__	  =     processor(images=_snake_case					,       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      _a				(  self       :							Tuple       ):






								"""simple docstring"""


								A__	  =     self.get_image_processor()
								A__	  =     self.get_tokenizer()

								A__	  =     CLIPSegProcessor(tokenizer=_snake_case					,       image_processor=_snake_case       )

								A__	  =     'lower newer'

								A__	  =     processor(text=_snake_case       )

								A__	  =     tokenizer(_snake_case       )

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



					def      _a				(  self       :							Optional[int]       ):






								"""simple docstring"""


								A__	  =     self.get_image_processor()
								A__	  =     self.get_tokenizer()

								A__	  =     CLIPSegProcessor(tokenizer=_snake_case					,       image_processor=_snake_case       )

								A__	  =     'lower newer'
								A__	  =     self.prepare_image_inputs()

								A__	  =     processor(text=_snake_case					,       images=_snake_case       )

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

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



					def      _a				(  self       :							Dict       ):






								"""simple docstring"""


								A__	  =     self.get_image_processor()
								A__	  =     self.get_tokenizer()

								A__	  =     CLIPSegProcessor(tokenizer=_snake_case					,       image_processor=_snake_case       )

								A__	  =     self.prepare_image_inputs()
								A__	  =     self.prepare_image_inputs()

								A__	  =     processor(images=_snake_case					,       visual_prompt=_snake_case       )

								self.assertListEqual(list(inputs.keys()       )					,       ['pixel_values', 'conditional_pixel_values']       )

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



					def      _a				(  self       :							int       ):






								"""simple docstring"""


								A__	  =     self.get_image_processor()
								A__	  =     self.get_tokenizer()

								A__	  =     CLIPSegProcessor(tokenizer=_snake_case					,       image_processor=_snake_case       )

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

								A__	  =     processor.batch_decode(_snake_case       )
								A__	  =     tokenizer.batch_decode(_snake_case       )

								self.assertListEqual(_snake_case					,       _snake_case       )










'''simple docstring'''







from __future__ import annotations

import unittest

import numpy as np

from transformers import BlipTextConfig
from transformers.testing_utils import require_tf, slow
from transformers.utils import is_tf_available

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor, random_attention_mask


if is_tf_available():
    import tensorflow as tf

    from transformers import TFBlipTextModel
    from transformers.models.blip.modeling_tf_blip import TF_BLIP_PRETRAINED_MODEL_ARCHIVE_LIST

class 	_snake_case:






 def __init__(self       :  Any    ,		a       :  str    ,		a       :  Union[str, Any]=12    ,		a       :  List[str]=7    ,		a       :  Dict=True    ,		a       :  Tuple=True    ,		a       :  Any=True    ,		a       :  Optional[Any]=99    ,		a       :  Optional[Any]=32    ,		a       :  Tuple=32    ,		a       :  List[Any]=2    ,		a       :  str=4    ,		a       :  Dict=37    ,		a       :  Optional[Any]=0.1    ,		a       :  List[Any]=0.1    ,		a       :  Dict=5_12    ,		a       :  List[Any]=0.02    ,		a       :  Any=0    ,		a       :  Optional[int]=None    ,		)       ->   List[Any]:






    """simple docstring"""


    A__       =     parent
    A__       =     batch_size
    A__       =     seq_length
    A__       =     is_training
    A__       =     use_input_mask
    A__       =     use_labels
    A__       =     vocab_size
    A__       =     hidden_size
    A__       =     projection_dim
    A__       =     num_hidden_layers
    A__       =     num_attention_heads
    A__       =     intermediate_size
    A__       =     dropout
    A__       =     attention_dropout
    A__       =     max_position_embeddings
    A__       =     initializer_range
    A__       =     scope
    A__       =     bos_token_id






 def 						_UpperCamelCase (self       :  Union[str, Any]    )       ->   List[Any]:






    """simple docstring"""


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

    A__       =     None
    if self.use_input_mask:
       A__       =     random_attention_mask([self.batch_size, self.seq_length]    )

    if input_mask is not None:
       A__       =     input_mask.numpy()
       A__  ,			A__       =     input_mask.shape
       A__       =     np.random.randint(1    ,		seq_length - 1    ,		size=(batch_size,)    )
       for batch_idx, start_index in enumerate(a    ):
          A__       =     1
          A__       =     0

    A__       =     self.get_config()

    return config, input_ids, tf.convert_to_tensor(a    )






 def 						_UpperCamelCase (self       :  Tuple    )       ->   Union[str, Any]:






    """simple docstring"""


    return BlipTextConfig(
        vocab_size=self.vocab_size    ,		hidden_size=self.hidden_size    ,		projection_dim=self.projection_dim    ,		num_hidden_layers=self.num_hidden_layers    ,		num_attention_heads=self.num_attention_heads    ,		intermediate_size=self.intermediate_size    ,		dropout=self.dropout    ,		attention_dropout=self.attention_dropout    ,		max_position_embeddings=self.max_position_embeddings    ,		initializer_range=self.initializer_range    ,		bos_token_id=self.bos_token_id    ,		)






 def 						_UpperCamelCase (self       :  Optional[int]    ,		a       :  Any    ,		a       :  List[Any]    ,		a       :  Union[str, Any]    )       ->   Any:






    """simple docstring"""


    A__       =     TFBlipTextModel(config=a    )
    A__       =     model(a    ,		attention_mask=a    ,		training=a    )
    A__       =     model(a    ,		training=a    )
    self.parent.assertEqual(result.last_hidden_state.shape    ,		(self.batch_size, self.seq_length, self.hidden_size)    )
    self.parent.assertEqual(result.pooler_output.shape    ,		(self.batch_size, self.hidden_size)    )






 def 						_UpperCamelCase (self       :  str    )       ->   List[Any]:






    """simple docstring"""


    A__       =     self.prepare_config_and_inputs()
    A__  ,			A__  ,			A__       =     config_and_inputs
    A__       =     {'input_ids': input_ids, 'attention_mask': input_mask}
    return config, inputs_dict




@require_tf
class 	_snake_case(			UpperCAmelCase       , unittest.TestCase      ):
 __snake_case:							Optional[int]						=					(TFBlipTextModel,) if is_tf_available() else ()
 __snake_case:							Union[str, Any]						=					False
 __snake_case:							Any						=					False
 __snake_case:							Union[str, Any]						=					False






 def 						_UpperCamelCase (self       :  Optional[Any]    )       ->   List[Any]:






    """simple docstring"""


    A__       =     BlipTextModelTester(self    )
    A__       =     ConfigTester(self    ,		config_class=a    ,		hidden_size=37    )






 def 						_UpperCamelCase (self       :  Tuple    )       ->   str:






    """simple docstring"""


    self.config_tester.run_common_tests()






 def 						_UpperCamelCase (self       :  Any    )       ->   Dict:






    """simple docstring"""


    A__       =     self.model_tester.prepare_config_and_inputs()
    self.model_tester.create_and_check_model(*a    )






 def 						_UpperCamelCase (self       :  Dict    )       ->   Dict:






    """simple docstring"""


    pass






 def 						_UpperCamelCase (self       :  str    )       ->   int:






    """simple docstring"""


    pass






 @unittest.skip(reason='Blip does not use inputs_embeds'    )
 def 						_UpperCamelCase (self       :  Union[str, Any]    )       ->   str:






    """simple docstring"""


    pass






 @unittest.skip(reason='BlipTextModel has no base class and is not available in MODEL_MAPPING'    )
 def 						_UpperCamelCase (self       :  int    )       ->   List[Any]:






    """simple docstring"""


    pass






 @unittest.skip(reason='BlipTextModel has no base class and is not available in MODEL_MAPPING'    )
 def 						_UpperCamelCase (self       :  int    )       ->   Optional[Any]:






    """simple docstring"""


    pass






 @slow
 def 						_UpperCamelCase (self       :  int    )       ->   Optional[Any]:






    """simple docstring"""


    for model_name in TF_BLIP_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
       A__       =     TFBlipTextModel.from_pretrained(a    )
       self.assertIsNotNone(a    )






 def 						_UpperCamelCase (self       :  str    ,		a       :  Optional[int]=True    )       ->   List[Any]:






    """simple docstring"""


    super().test_pt_tf_model_equivalence(allow_missing_keys=a    )


