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      lowerCAmelCase						:



     def __init__(					self				,      lowerCAmelCase__				,      lowerCAmelCase__=12				,      lowerCAmelCase__=7				,      lowerCAmelCase__=True				,      lowerCAmelCase__=True				,      lowerCAmelCase__=True				,      lowerCAmelCase__=99				,      lowerCAmelCase__=32				,      lowerCAmelCase__=32				,      lowerCAmelCase__=2				,      lowerCAmelCase__=4				,      lowerCAmelCase__=37				,      lowerCAmelCase__=0.1				,      lowerCAmelCase__=0.1				,      lowerCAmelCase__=512				,      lowerCAmelCase__=0.02				,      lowerCAmelCase__=0				,      lowerCAmelCase__=None				,      ):
            _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 			a__  (					self       ):
            _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(lowerCAmelCase__       ):
                          _A=	1
                          _A=	0

            _A=	self.get_config()

            return config, input_ids, tf.convert_to_tensor(lowerCAmelCase__       )



     def 			a__  (					self       ):
            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 			a__  (					self				,      lowerCAmelCase__				,      lowerCAmelCase__				,      lowerCAmelCase__       ):
            _A=	TFBlipTextModel(config=lowerCAmelCase__       )
            _A=	model(lowerCAmelCase__				,      attention_mask=lowerCAmelCase__				,      training=lowerCAmelCase__       )
            _A=	model(lowerCAmelCase__				,      training=lowerCAmelCase__       )
            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 			a__  (					self       ):
            _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      lowerCAmelCase						(					_a			,		unittest.TestCase			):
     _SCREAMING_SNAKE_CASE     :     Union[str, Any]		=(TFBlipTextModel,) if is_tf_available() else ()
     _SCREAMING_SNAKE_CASE     :     Tuple		=False
     _SCREAMING_SNAKE_CASE     :     Tuple		=False
     _SCREAMING_SNAKE_CASE     :     Tuple		=False



     def 			a__  (					self       ):
            _A=	BlipTextModelTester(self       )
            _A=	ConfigTester(self				,      config_class=lowerCAmelCase__				,      hidden_size=37       )



     def 			a__  (					self       ):
            self.config_tester.run_common_tests()



     def 			a__  (					self       ):
            _A=	self.model_tester.prepare_config_and_inputs()
            self.model_tester.create_and_check_model(*lowerCAmelCase__       )



     def 			a__  (					self       ):
            pass



     def 			a__  (					self       ):
            pass



     @unittest.skip(reason='Blip does not use inputs_embeds'       )
     def 			a__  (					self       ):
            pass



     @unittest.skip(reason='BlipTextModel has no base class and is not available in MODEL_MAPPING'       )
     def 			a__  (					self       ):
            pass



     @unittest.skip(reason='BlipTextModel has no base class and is not available in MODEL_MAPPING'       )
     def 			a__  (					self       ):
            pass



     @slow
     def 			a__  (					self       ):
            for model_name in TF_BLIP_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
                   _A=	TFBlipTextModel.from_pretrained(lowerCAmelCase__       )
                   self.assertIsNotNone(lowerCAmelCase__       )





     def 			a__  (					self				,      lowerCAmelCase__=True       ):
            super().test_pt_tf_model_equivalence(allow_missing_keys=lowerCAmelCase__       )
UpperCAmelCase_								=							{
    '''Pillow''': '''Pillow<10.0.0''',
    '''accelerate''': '''accelerate>=0.20.3''',
    '''av''': '''av==9.2.0''',
    '''beautifulsoup4''': '''beautifulsoup4''',
    '''black''': '''black~=23.1''',
    '''codecarbon''': '''codecarbon==1.2.0''',
    '''cookiecutter''': '''cookiecutter==1.7.3''',
    '''dataclasses''': '''dataclasses''',
    '''datasets''': '''datasets!=2.5.0''',
    '''decord''': '''decord==0.6.0''',
    '''deepspeed''': '''deepspeed>=0.9.3''',
    '''diffusers''': '''diffusers''',
    '''dill''': '''dill<0.3.5''',
    '''evaluate''': '''evaluate>=0.2.0''',
    '''fairscale''': '''fairscale>0.3''',
    '''faiss-cpu''': '''faiss-cpu''',
    '''fastapi''': '''fastapi''',
    '''filelock''': '''filelock''',
    '''flax''': '''flax>=0.4.1,<=0.7.0''',
    '''ftfy''': '''ftfy''',
    '''fugashi''': '''fugashi>=1.0''',
    '''GitPython''': '''GitPython<3.1.19''',
    '''hf-doc-builder''': '''hf-doc-builder>=0.3.0''',
    '''huggingface-hub''': '''huggingface-hub>=0.14.1,<1.0''',
    '''importlib_metadata''': '''importlib_metadata''',
    '''ipadic''': '''ipadic>=1.0.0,<2.0''',
    '''isort''': '''isort>=5.5.4''',
    '''jax''': '''jax>=0.2.8,!=0.3.2,<=0.4.13''',
    '''jaxlib''': '''jaxlib>=0.1.65,<=0.4.13''',
    '''jieba''': '''jieba''',
    '''kenlm''': '''kenlm''',
    '''keras-nlp''': '''keras-nlp>=0.3.1''',
    '''librosa''': '''librosa''',
    '''nltk''': '''nltk''',
    '''natten''': '''natten>=0.14.6''',
    '''numpy''': '''numpy>=1.17''',
    '''onnxconverter-common''': '''onnxconverter-common''',
    '''onnxruntime-tools''': '''onnxruntime-tools>=1.4.2''',
    '''onnxruntime''': '''onnxruntime>=1.4.0''',
    '''opencv-python''': '''opencv-python''',
    '''optuna''': '''optuna''',
    '''optax''': '''optax>=0.0.8,<=0.1.4''',
    '''packaging''': '''packaging>=20.0''',
    '''parameterized''': '''parameterized''',
    '''phonemizer''': '''phonemizer''',
    '''protobuf''': '''protobuf''',
    '''psutil''': '''psutil''',
    '''pyyaml''': '''pyyaml>=5.1''',
    '''pydantic''': '''pydantic<2''',
    '''pytest''': '''pytest>=7.2.0''',
    '''pytest-timeout''': '''pytest-timeout''',
    '''pytest-xdist''': '''pytest-xdist''',
    '''python''': '''python>=3.8.0''',
    '''ray[tune]''': '''ray[tune]''',
    '''regex''': '''regex!=2019.12.17''',
    '''requests''': '''requests''',
    '''rhoknp''': '''rhoknp>=1.1.0,<1.3.1''',
    '''rjieba''': '''rjieba''',
    '''rouge-score''': '''rouge-score!=0.0.7,!=0.0.8,!=0.1,!=0.1.1''',
    '''ruff''': '''ruff>=0.0.241,<=0.0.259''',
    '''sacrebleu''': '''sacrebleu>=1.4.12,<2.0.0''',
    '''sacremoses''': '''sacremoses''',
    '''safetensors''': '''safetensors>=0.3.1''',
    '''sagemaker''': '''sagemaker>=2.31.0''',
    '''scikit-learn''': '''scikit-learn''',
    '''sentencepiece''': '''sentencepiece>=0.1.91,!=0.1.92''',
    '''sigopt''': '''sigopt''',
    '''starlette''': '''starlette''',
    '''sudachipy''': '''sudachipy>=0.6.6''',
    '''sudachidict_core''': '''sudachidict_core>=20220729''',
    '''tensorflow-cpu''': '''tensorflow-cpu>=2.6,<2.14''',
    '''tensorflow''': '''tensorflow>=2.6,<2.14''',
    '''tensorflow-text''': '''tensorflow-text<2.14''',
    '''tf2onnx''': '''tf2onnx''',
    '''timeout-decorator''': '''timeout-decorator''',
    '''timm''': '''timm''',
    '''tokenizers''': '''tokenizers>=0.11.1,!=0.11.3,<0.14''',
    '''torch''': '''torch>=1.9,!=1.12.0''',
    '''torchaudio''': '''torchaudio''',
    '''torchvision''': '''torchvision''',
    '''pyctcdecode''': '''pyctcdecode>=0.4.0''',
    '''tqdm''': '''tqdm>=4.27''',
    '''unidic''': '''unidic>=1.0.2''',
    '''unidic_lite''': '''unidic_lite>=1.0.7''',
    '''urllib3''': '''urllib3<2.0.0''',
    '''uvicorn''': '''uvicorn''',
}