


from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


__snake_case             =	{'''configuration_nat''': ['''NAT_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''NatConfig''']}


try:
    if not is_torch_available():
        raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
    pass
else:
    __snake_case             =	[
        '''NAT_PRETRAINED_MODEL_ARCHIVE_LIST''',
        '''NatForImageClassification''',
        '''NatModel''',
        '''NatPreTrainedModel''',
        '''NatBackbone''',
    ]

if TYPE_CHECKING:
    from .configuration_nat import NAT_PRETRAINED_CONFIG_ARCHIVE_MAP, NatConfig

    try:
        if not is_torch_available():
            raise OptionalDependencyNotAvailable()
    except OptionalDependencyNotAvailable:
        pass
    else:
        from .modeling_nat import (
            NAT_PRETRAINED_MODEL_ARCHIVE_LIST,
            NatBackbone,
            NatForImageClassification,
            NatModel,
            NatPreTrainedModel,
        )

else:
    import sys

    __snake_case             =	_LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)






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:
    __snake_case             =	False


if is_vision_available():
    from PIL import Image
else:



    class   __lowerCamelCase :







           @staticmethod
           def 		snake_case_  ( *A_:   List[str],**A_:   Any				):






                '''simple docstring'''




                pass



@is_pipeline_test
@require_vision
class   __lowerCamelCase (unittest.TestCase	):
       _lowercase       							=    MODEL_FOR_VISION_2_SEQ_MAPPING
       _lowercase       							=    TF_MODEL_FOR_VISION_2_SEQ_MAPPING







       def 		snake_case_  ( self:   Dict,A_:   int,A_:   List[str],A_:   List[str]				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model=A_,tokenizer=A_,image_processor=A_				)
            __UpperCamelCase   = [
                Image.open('./tests/fixtures/tests_samples/COCO/000000039769.png'				),
                './tests/fixtures/tests_samples/COCO/000000039769.png',
            ]
            return pipe, examples







       def 		snake_case_  ( self:   Union[str, Any],A_:   Optional[Any],A_:   Optional[int]				):






            '''simple docstring'''




            __UpperCamelCase   = pipe(A_				)
            self.assertEqual(
                A_,[
                    [{'generated_text': ANY(A_				)}],
                    [{'generated_text': ANY(A_				)}],
                ],)







       @require_tf
       def 		snake_case_  ( self:   str				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='hf-internal-testing/tiny-random-vit-gpt2',framework='tf'				)
            __UpperCamelCase   = './tests/fixtures/tests_samples/COCO/000000039769.png'

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

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

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







       @require_torch
       def 		snake_case_  ( self:   Any				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='hf-internal-testing/tiny-random-vit-gpt2'				)
            __UpperCamelCase   = './tests/fixtures/tests_samples/COCO/000000039769.png'

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

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







       @require_torch
       def 		snake_case_  ( self:   str				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='hf-internal-testing/tiny-random-BlipForConditionalGeneration'				)
            __UpperCamelCase   = './tests/fixtures/tests_samples/COCO/000000039769.png'
            __UpperCamelCase   = 'a photo of'

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







       @slow
       @require_torch
       def 		snake_case_  ( self:   Dict				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='ydshieh/vit-gpt2-coco-en'				)
            __UpperCamelCase   = './tests/fixtures/tests_samples/COCO/000000039769.png'

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

            __UpperCamelCase   = pipe([image, image]				)
            self.assertEqual(
                A_,[
                    [{'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 		snake_case_  ( self:   Dict				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='Salesforce/blip-image-captioning-base'				)
            __UpperCamelCase   = 'https://huggingface.co/datasets/sayakpaul/sample-datasets/resolve/main/pokemon.png'
            __UpperCamelCase   = Image.open(requests.get(A_,stream=A_				).raw				)

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







       @slow
       @require_torch
       def 		snake_case_  ( self:   Dict				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='microsoft/git-base-coco'				)
            __UpperCamelCase   = 'https://huggingface.co/datasets/sayakpaul/sample-datasets/resolve/main/pokemon.png'
            __UpperCamelCase   = Image.open(requests.get(A_,stream=A_				).raw				)

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







       @slow
       @require_torch
       def 		snake_case_  ( self:   Dict				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='Salesforce/blip-image-captioning-base'				)
            __UpperCamelCase   = 'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg'
            __UpperCamelCase   = Image.open(requests.get(A_,stream=A_				).raw				)

            __UpperCamelCase   = 'a photography of'

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

            with self.assertRaises(A_				):
                 __UpperCamelCase   = pipe([image, image],prompt=[prompt, prompt]				)







       @slow
       @require_torch
       def 		snake_case_  ( self:   List[Any]				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='microsoft/git-base-coco'				)
            __UpperCamelCase   = 'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg'
            __UpperCamelCase   = Image.open(requests.get(A_,stream=A_				).raw				)

            __UpperCamelCase   = 'a photo of a'

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

            with self.assertRaises(A_				):
                 __UpperCamelCase   = 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 		snake_case_  ( self:   List[Any]				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='google/pix2struct-ai2d-base'				)
            __UpperCamelCase   = 'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/transformers/tasks/ai2d-demo.jpg'
            __UpperCamelCase   = Image.open(requests.get(A_,stream=A_				).raw				)

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

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

            with self.assertRaises(A_				):
                 __UpperCamelCase   = pipe([image, image],prompt=[prompt, prompt]				)







       @slow
       @require_tf
       def 		snake_case_  ( self:   Any				):






            '''simple docstring'''




            __UpperCamelCase   = pipeline('image-to-text',model='ydshieh/vit-gpt2-coco-en',framework='tf'				)
            __UpperCamelCase   = './tests/fixtures/tests_samples/COCO/000000039769.png'

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

            __UpperCamelCase   = pipe([image, image]				)
            self.assertEqual(
                A_,[
                    [{'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 '}],
                ],)


