

import unittest

import numpy as np

from transformers import ElectraConfig, is_flax_available
from transformers.testing_utils import require_flax, slow

from ...test_modeling_flax_common import FlaxModelTesterMixin, ids_tensor, random_attention_mask


if is_flax_available():
	from transformers.models.electra.modeling_flax_electra import (
	    FlaxElectraForCausalLM,
	    FlaxElectraForMaskedLM,
	    FlaxElectraForMultipleChoice,
	    FlaxElectraForPreTraining,
	    FlaxElectraForQuestionAnswering,
	    FlaxElectraForSequenceClassification,
	    FlaxElectraForTokenClassification,
	    FlaxElectraModel,
	)


class 			_SCREAMING_SNAKE_CASE      (  unittest.TestCase):







						def __init__(			self     ,						_SCREAMING_SNAKE_CASE     ,						_SCREAMING_SNAKE_CASE=13     ,						_SCREAMING_SNAKE_CASE=7     ,						_SCREAMING_SNAKE_CASE=True     ,						_SCREAMING_SNAKE_CASE=True     ,						_SCREAMING_SNAKE_CASE=True     ,						_SCREAMING_SNAKE_CASE=True     ,						_SCREAMING_SNAKE_CASE=99     ,						_SCREAMING_SNAKE_CASE=24     ,						_SCREAMING_SNAKE_CASE=32     ,						_SCREAMING_SNAKE_CASE=5     ,						_SCREAMING_SNAKE_CASE=4     ,						_SCREAMING_SNAKE_CASE=37     ,						_SCREAMING_SNAKE_CASE="gelu"     ,						_SCREAMING_SNAKE_CASE=0.1     ,						_SCREAMING_SNAKE_CASE=0.1     ,						_SCREAMING_SNAKE_CASE=512     ,						_SCREAMING_SNAKE_CASE=16     ,						_SCREAMING_SNAKE_CASE=2     ,						_SCREAMING_SNAKE_CASE=0.0_2     ,						_SCREAMING_SNAKE_CASE=4     ,						)->							Union[str, Any]:
													lowerCamelCase_								=parent
													lowerCamelCase_								=batch_size
													lowerCamelCase_								=seq_length
													lowerCamelCase_								=is_training
													lowerCamelCase_								=use_attention_mask
													lowerCamelCase_								=use_token_type_ids
													lowerCamelCase_								=use_labels
													lowerCamelCase_								=vocab_size
													lowerCamelCase_								=hidden_size
													lowerCamelCase_								=embedding_size
													lowerCamelCase_								=num_hidden_layers
													lowerCamelCase_								=num_attention_heads
													lowerCamelCase_								=intermediate_size
													lowerCamelCase_								=hidden_act
													lowerCamelCase_								=hidden_dropout_prob
													lowerCamelCase_								=attention_probs_dropout_prob
													lowerCamelCase_								=max_position_embeddings
													lowerCamelCase_								=type_vocab_size
													lowerCamelCase_								=type_sequence_label_size
													lowerCamelCase_								=initializer_range
													lowerCamelCase_								=num_choices







						def        _snake_case				(			self							)->							int:
													lowerCamelCase_								=ids_tensor([self.batch_size, self.seq_length]     ,						self.vocab_size							)

													lowerCamelCase_								=None
													if self.use_attention_mask:
																				lowerCamelCase_								=random_attention_mask([self.batch_size, self.seq_length]							)

													lowerCamelCase_								=None
													if self.use_token_type_ids:
																				lowerCamelCase_								=ids_tensor([self.batch_size, self.seq_length]     ,						self.type_vocab_size							)

													lowerCamelCase_								=ElectraConfig(
													    vocab_size=self.vocab_size     ,						hidden_size=self.hidden_size     ,						embedding_size=self.embedding_size     ,						num_hidden_layers=self.num_hidden_layers     ,						num_attention_heads=self.num_attention_heads     ,						intermediate_size=self.intermediate_size     ,						hidden_act=self.hidden_act     ,						hidden_dropout_prob=self.hidden_dropout_prob     ,						attention_probs_dropout_prob=self.attention_probs_dropout_prob     ,						max_position_embeddings=self.max_position_embeddings     ,						type_vocab_size=self.type_vocab_size     ,						initializer_range=self.initializer_range     ,						)

													return config, input_ids, token_type_ids, attention_mask







						def        _snake_case				(			self							)->							List[str]:
													lowerCamelCase_								=self.prepare_config_and_inputs()
													lowerCamelCase_	,   lowerCamelCase_	,   lowerCamelCase_	,   lowerCamelCase_								=config_and_inputs
													lowerCamelCase_								={"""input_ids""": input_ids, """token_type_ids""": token_type_ids, """attention_mask""": attention_mask}
													return config, inputs_dict


@require_flax
class 			_SCREAMING_SNAKE_CASE      (  __lowerCAmelCase ,    unittest.TestCase):
						_UpperCamelCase:str	=		True

						_UpperCamelCase:Optional[int]	=		(
						    (
						        FlaxElectraModel,
						        FlaxElectraForCausalLM,
						        FlaxElectraForMaskedLM,
						        FlaxElectraForPreTraining,
						        FlaxElectraForTokenClassification,
						        FlaxElectraForQuestionAnswering,
						        FlaxElectraForMultipleChoice,
						        FlaxElectraForSequenceClassification,
						    )
						    if is_flax_available()
						    else ()
						)







						def        _snake_case				(			self							)->							str:
													lowerCamelCase_								=FlaxElectraModelTester(self							)







						@slow
						def        _snake_case				(			self							)->							Any:
													for model_class_name in self.all_model_classes:
																				if model_class_name == FlaxElectraForMaskedLM:
																											lowerCamelCase_								=model_class_name.from_pretrained("""google/electra-small-generator"""							)
																				else:
																											lowerCamelCase_								=model_class_name.from_pretrained("""google/electra-small-discriminator"""							)
																				lowerCamelCase_								=model(np.ones((1, 1)							)							)
																				self.assertIsNotNone(lowercase_							)



'''simple docstring'''

import unittest

import requests

from transformers import MODEL_FOR_VISION_2_SEQ_MAPPING, TF_MODEL_FOR_VISION_2_SEQ_MAPPING, is_vision_available
from transformers.pipelines import pipeline
from transformers.testing_utils import (
    is_pipeline_test,
    is_torch_available,
    require_tf,
    require_torch,
    require_vision,
    slow,
)

from .test_pipelines_common import ANY


if is_torch_available():
						from transformers.pytorch_utils import is_torch_greater_or_equal_than_1_11
else:
						lowerCAmelCase_     =      False


if is_vision_available():
						from PIL import Image
else:







						class lowerCamelCase   :

										@staticmethod
										def 					_lowerCamelCase    (       *lowercase_,						**lowercase_ )    ->							List[Any]:
											pass







@is_pipeline_test
@require_vision
class lowerCamelCase   (    unittest.TestCase				):
				snake_case_							     = MODEL_FOR_VISION_2_SEQ_MAPPING
				snake_case_							     = TF_MODEL_FOR_VISION_2_SEQ_MAPPING

				def 					_lowerCamelCase    (       self,						lowercase_,						lowercase_,						lowercase_ )    ->							Optional[Any]:
					snake_case							=					pipeline('image-to-text',						model=lowercase_,						tokenizer=lowercase_,						image_processor=lowercase_ )
					snake_case							=					[
					    Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png' ),
					    './tests/fixtures/tests_samples/COCO/000000039769.png',
					]
					return pipe, examples

				def 					_lowerCamelCase    (       self,						lowercase_,						lowercase_ )    ->							Tuple:
					snake_case							=					pipe(lowercase_ )
					self.assertEqual(
					    lowercase_,						[
					        [{'generated_text': ANY(lowercase_ )}],
					        [{'generated_text': ANY(lowercase_ )}],
					    ],						)

				@require_tf
				def 					_lowerCamelCase    (       self )    ->							int:
					snake_case							=					pipeline('image-to-text',						model='hf-internal-testing/tiny-random-vit-gpt2',						framework='tf' )
					snake_case							=					'./tests/fixtures/tests_samples/COCO/000000039769.png'

					snake_case							=					pipe(lowercase_ )
					self.assertEqual(
					    lowercase_,						[
					        {
					            'generated_text': 'growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'
					        },
					    ],						)

					snake_case							=					pipe([image, image] )
					self.assertEqual(
					    lowercase_,						[
					        [
					            {
					                'generated_text': 'growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'
					            }
					        ],
					        [
					            {
					                'generated_text': 'growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'
					            }
					        ],
					    ],						)

					snake_case							=					pipe(lowercase_,						max_new_tokens=1 )
					self.assertEqual(
					    lowercase_,						[{'generated_text': 'growth'}],						)

				@require_torch
				def 					_lowerCamelCase    (       self )    ->							Tuple:
					snake_case							=					pipeline('image-to-text',						model='hf-internal-testing/tiny-random-vit-gpt2' )
					snake_case							=					'./tests/fixtures/tests_samples/COCO/000000039769.png'

					snake_case							=					pipe(lowercase_ )
					self.assertEqual(
					    lowercase_,						[
					        {
					            'generated_text': 'growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'
					        },
					    ],						)

					snake_case							=					pipe([image, image] )
					self.assertEqual(
					    lowercase_,						[
					        [
					            {
					                'generated_text': 'growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'
					            }
					        ],
					        [
					            {
					                'generated_text': 'growthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthgrowthGOGO'
					            }
					        ],
					    ],						)

				@require_torch
				def 					_lowerCamelCase    (       self )    ->							Union[str, Any]:
					snake_case							=					pipeline('image-to-text',						model='hf-internal-testing/tiny-random-BlipForConditionalGeneration' )
					snake_case							=					'./tests/fixtures/tests_samples/COCO/000000039769.png'
					snake_case							=					'a photo of'

					snake_case							=					pipe(lowercase_,						prompt=lowercase_ )
					self.assertTrue(outputs[0]['generated_text'].startswith(lowercase_ ) )

				@slow
				@require_torch
				def 					_lowerCamelCase    (       self )    ->							Optional[Any]:
					snake_case							=					pipeline('image-to-text',						model='ydshieh/vit-gpt2-coco-en' )
					snake_case							=					'./tests/fixtures/tests_samples/COCO/000000039769.png'

					snake_case							=					pipe(lowercase_ )
					self.assertEqual(lowercase_,						[{'generated_text': 'a cat laying on a blanket next to a cat laying on a bed '}] )

					snake_case							=					pipe([image, image] )
					self.assertEqual(
					    lowercase_,						[
					        [{'generated_text': 'a cat laying on a blanket next to a cat laying on a bed '}],
					        [{'generated_text': 'a cat laying on a blanket next to a cat laying on a bed '}],
					    ],						)

				@slow
				@require_torch
				def 					_lowerCamelCase    (       self )    ->							List[Any]:
					snake_case							=					pipeline('image-to-text',						model='Salesforce/blip-image-captioning-base' )
					snake_case							=					'https://huggingface.co/datasets/sayakpaul/sample-datasets/resolve/main/pokemon.png'
					snake_case							=					Image.open(requests.get(lowercase_,						stream=lowercase_ ).raw )

					snake_case							=					pipe(lowercase_ )
					self.assertEqual(lowercase_,						[{'generated_text': 'a pink pokemon pokemon with a blue shirt and a blue shirt'}] )

				@slow
				@require_torch
				def 					_lowerCamelCase    (       self )    ->							Dict:
					snake_case							=					pipeline('image-to-text',						model='microsoft/git-base-coco' )
					snake_case							=					'https://huggingface.co/datasets/sayakpaul/sample-datasets/resolve/main/pokemon.png'
					snake_case							=					Image.open(requests.get(lowercase_,						stream=lowercase_ ).raw )

					snake_case							=					pipe(lowercase_ )
					self.assertEqual(lowercase_,						[{'generated_text': 'a cartoon of a purple character.'}] )

				@slow
				@require_torch
				def 					_lowerCamelCase    (       self )    ->							Optional[Any]:
					snake_case							=					pipeline('image-to-text',						model='Salesforce/blip-image-captioning-base' )
					snake_case							=					'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg'
					snake_case							=					Image.open(requests.get(lowercase_,						stream=lowercase_ ).raw )

					snake_case							=					'a photography of'

					snake_case							=					pipe(lowercase_,						prompt=lowercase_ )
					self.assertEqual(lowercase_,						[{'generated_text': 'a photography of a volcano'}] )

					with self.assertRaises(lowercase_ ):
						snake_case							=					pipe([image, image],						prompt=[prompt, prompt] )

				@slow
				@require_torch
				def 					_lowerCamelCase    (       self )    ->							Dict:
					snake_case							=					pipeline('image-to-text',						model='microsoft/git-base-coco' )
					snake_case							=					'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg'
					snake_case							=					Image.open(requests.get(lowercase_,						stream=lowercase_ ).raw )

					snake_case							=					'a photo of a'

					snake_case							=					pipe(lowercase_,						prompt=lowercase_ )
					self.assertEqual(lowercase_,						[{'generated_text': 'a photo of a tent with a tent and a tent in the background.'}] )

					with self.assertRaises(lowercase_ ):
						snake_case							=					pipe([image, image],						prompt=[prompt, prompt] )

				@unittest.skipIf(
				    not is_torch_greater_or_equal_than_1_11,						reason='`Pix2StructImageProcessor` requires `torch>=1.11.0`.' )
				@slow
				@require_torch
				def 					_lowerCamelCase    (       self )    ->							Any:
					snake_case							=					pipeline('image-to-text',						model='google/pix2struct-ai2d-base' )
					snake_case							=					'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg'
					snake_case							=					Image.open(requests.get(lowercase_,						stream=lowercase_ ).raw )

					snake_case							=					'What does the label 15 represent? (1) lava (2) core (3) tunnel (4) ash cloud'

					snake_case							=					pipe(lowercase_,						prompt=lowercase_ )
					self.assertEqual(lowercase_,						[{'generated_text': 'ash cloud'}] )

					with self.assertRaises(lowercase_ ):
						snake_case							=					pipe([image, image],						prompt=[prompt, prompt] )






				@slow
				@require_tf
				def 					_lowerCamelCase    (       self )    ->							Optional[int]:
					snake_case							=					pipeline('image-to-text',						model='ydshieh/vit-gpt2-coco-en',						framework='tf' )
					snake_case							=					'./tests/fixtures/tests_samples/COCO/000000039769.png'

					snake_case							=					pipe(lowercase_ )
					self.assertEqual(lowercase_,						[{'generated_text': 'a cat laying on a blanket next to a cat laying on a bed '}] )

					snake_case							=					pipe([image, image] )
					self.assertEqual(
					    lowercase_,						[
					        [{'generated_text': 'a cat laying on a blanket next to a cat laying on a bed '}],
					        [{'generated_text': 'a cat laying on a blanket next to a cat laying on a bed '}],
					    ],						)





