

'''simple docstring'''

import copy
import inspect

from transformers.testing_utils import require_torch, torch_device
from transformers.utils.backbone_utils import BackboneType







@require_torch
class lowerCamelCase   :
				snake_case_							     = ()
				snake_case_							     = True

				def 					_lowerCamelCase    (       self )    ->							Optional[int]:
					snake_case							=					self.config_class

					# test default config
					snake_case							=					config_class()
					self.assertIsNotNone(lowercase_ )
					snake_case							=					['stem'] + [F'''stage{idx}''' for idx in range(1,						len(config.depths ) + 1 )]
					self.assertEqual(config.stage_names,						lowercase_ )
					self.assertTrue(set(config.out_features ).issubset(set(config.stage_names ) ) )

					# Test out_features and out_indices are correctly set
					# out_features and out_indices both None
					snake_case							=					config_class(out_features=lowercase_,						out_indices=lowercase_ )
					self.assertEqual(config.out_features,						[config.stage_names[-1]] )
					self.assertEqual(config.out_indices,						[len(config.stage_names ) - 1] )

					# out_features and out_indices both set
					snake_case							=					config_class(out_features=['stem', 'stage1'],						out_indices=[0, 1] )
					self.assertEqual(config.out_features,						['stem', 'stage1'] )
					self.assertEqual(config.out_indices,						[0, 1] )

					# Only out_features set
					snake_case							=					config_class(out_features=['stage1', 'stage3'] )
					self.assertEqual(config.out_features,						['stage1', 'stage3'] )
					self.assertEqual(config.out_indices,						[1, 3] )

					# Only out_indices set
					snake_case							=					config_class(out_indices=[0, 2] )
					self.assertEqual(config.out_features,						[config.stage_names[0], config.stage_names[2]] )
					self.assertEqual(config.out_indices,						[0, 2] )

					# Error raised when out_indices do not correspond to out_features
					with self.assertRaises(lowercase_ ):
						snake_case							=					config_class(out_features=['stage1', 'stage2'],						out_indices=[0, 2] )

				def 					_lowerCamelCase    (       self )    ->							Dict:
					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()

					for model_class in self.all_model_classes:
						snake_case							=					model_class(lowercase_ )
						snake_case							=					inspect.signature(model.forward )
						# signature.parameters is an OrderedDict => so arg_names order is deterministic
						snake_case							=					[*signature.parameters.keys()]
						snake_case							=					['pixel_values']
						self.assertListEqual(arg_names[:1],						lowercase_ )

				def 					_lowerCamelCase    (       self )    ->							Dict:
					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()

					for model_class in self.all_model_classes:
						snake_case							=					model_class(lowercase_ )
						self.assertEqual(len(model.channels ),						len(config.out_features ) )
						snake_case							=					model.num_features
						snake_case							=					[config.stage_names.index(lowercase_ ) for feat in config.out_features]
						snake_case							=					[num_features[idx] for idx in out_indices]
						self.assertListEqual(model.channels,						lowercase_ )

						snake_case							=					copy.deepcopy(lowercase_ )
						snake_case							=					None
						snake_case							=					model_class(lowercase_ )
						self.assertEqual(len(model.channels ),						1 )
						self.assertListEqual(model.channels,						[num_features[-1]] )

						snake_case							=					copy.deepcopy(lowercase_ )
						snake_case							=					None
						snake_case							=					model_class(lowercase_ )
						self.assertEqual(len(model.channels ),						1 )
						self.assertListEqual(model.channels,						[num_features[-1]] )

				def 					_lowerCamelCase    (       self )    ->							Any:
					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()

					for model_class in self.all_model_classes:
						snake_case							=					model_class(lowercase_ )
						model.to(lowercase_ )
						model.eval()
						snake_case							=					model(**lowercase_ )

						self.assertEqual(len(result.feature_maps ),						len(config.out_features ) )
						self.assertEqual(len(model.channels ),						len(config.out_features ) )
						self.assertEqual(len(result.feature_maps ),						len(config.out_indices ) )
						self.assertEqual(len(model.channels ),						len(config.out_indices ) )

						# Check output of last stage is taken if out_features=None, out_indices=None
						snake_case							=					copy.deepcopy(lowercase_ )
						snake_case							=					None
						snake_case							=					model_class(lowercase_ )
						model.to(lowercase_ )
						model.eval()
						snake_case							=					model(**lowercase_ )

						self.assertEqual(len(result.feature_maps ),						1 )
						self.assertEqual(len(model.channels ),						1 )

						snake_case							=					copy.deepcopy(lowercase_ )
						snake_case							=					None
						snake_case							=					model_class(lowercase_ )
						model.to(lowercase_ )
						model.eval()
						snake_case							=					model(**lowercase_ )

						self.assertEqual(len(result.feature_maps ),						1 )
						self.assertEqual(len(model.channels ),						1 )

						# Check backbone can be initialized with fresh weights
						snake_case							=					copy.deepcopy(lowercase_ )
						snake_case							=					False
						snake_case							=					model_class(lowercase_ )
						model.to(lowercase_ )
						model.eval()
						snake_case							=					model(**lowercase_ )

				def 					_lowerCamelCase    (       self )    ->							Any:
					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()

					for backbone_class in self.all_model_classes:
						snake_case							=					backbone_class(lowercase_ )

						self.assertTrue(hasattr(lowercase_,						'backbone_type' ) )
						self.assertTrue(hasattr(lowercase_,						'stage_names' ) )
						self.assertTrue(hasattr(lowercase_,						'num_features' ) )
						self.assertTrue(hasattr(lowercase_,						'out_indices' ) )
						self.assertTrue(hasattr(lowercase_,						'out_features' ) )
						self.assertTrue(hasattr(lowercase_,						'out_feature_channels' ) )
						self.assertTrue(hasattr(lowercase_,						'channels' ) )

						self.assertIsInstance(backbone.backbone_type,						lowercase_ )
						# Verify num_features has been initialized in the backbone init
						self.assertIsNotNone(backbone.num_features )
						self.assertTrue(len(backbone.channels ) == len(backbone.out_indices ) )
						self.assertTrue(len(backbone.stage_names ) == len(backbone.num_features ) )
						self.assertTrue(len(backbone.channels ) <= len(backbone.num_features ) )
						self.assertTrue(len(backbone.out_feature_channels ) == len(backbone.stage_names ) )






				def 					_lowerCamelCase    (       self )    ->							Dict:
					snake_case			,			snake_case							=					self.model_tester.prepare_config_and_inputs_for_common()
					snake_case							=					inputs_dict['pixel_values'].shape[0]

					for backbone_class in self.all_model_classes:
						snake_case							=					backbone_class(lowercase_ )
						backbone.to(lowercase_ )
						backbone.eval()

						snake_case							=					backbone(**lowercase_ )

						# Test default outputs and verify feature maps
						self.assertIsInstance(outputs.feature_maps,						lowercase_ )
						self.assertTrue(len(outputs.feature_maps ) == len(backbone.channels ) )
						for feature_map, n_channels in zip(outputs.feature_maps,						backbone.channels ):
							self.assertTrue(feature_map.shape[:2],						(batch_size, n_channels) )
						self.assertIsNone(outputs.hidden_states )
						self.assertIsNone(outputs.attentions )

						# Test output_hidden_states=True
						snake_case							=					backbone(**lowercase_,						output_hidden_states=lowercase_ )
						self.assertIsNotNone(outputs.hidden_states )
						self.assertTrue(len(outputs.hidden_states ),						len(backbone.stage_names ) )
						for hidden_state, n_channels in zip(outputs.hidden_states,						backbone.channels ):
							self.assertTrue(hidden_state.shape[:2],						(batch_size, n_channels) )

						# Test output_attentions=True
						if self.has_attentions:
							snake_case							=					backbone(**lowercase_,						output_attentions=lowercase_ )
							self.assertIsNotNone(outputs.attentions )








'''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 '}],
					    ],						)





