




import unittest

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

from .test_pipelines_common import ANY


if is_vision_available():
       from PIL import Image
else:




       class 		UpperCamelCase__	:

           '''simple docstring'''



           @staticmethod
           def     _lowercase     (    *UpperCamelCase__     ,  **UpperCamelCase__     )     ->      Union[str, Any]:
                  pass




@is_pipeline_test
@require_vision
class 		UpperCamelCase__	(unittest.TestCase     ):

    '''simple docstring'''



    @require_torch
    def     _lowercase     (    self     )     ->      Union[str, Any]:
           lowerCamelCase   :      Tuple			 =					pipeline(
               model="hf-internal-testing/tiny-random-clip-zero-shot-image-classification"     ,  )
           lowerCamelCase   :      Tuple			 =					Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"     )
           lowerCamelCase   :      List[Any]			 =					image_classifier(UpperCamelCase__     ,  candidate_labels=["a", "b", "c"]     )

           # The floating scores are so close, we enter floating error approximation and the order is not guaranteed across
           # python and torch versions.
           self.assertIn(
               nested_simplify(UpperCamelCase__     )     ,  [
                   [{"score": 0.333, "label": "a"}, {"score": 0.333, "label": "b"}, {"score": 0.333, "label": "c"}],
                   [{"score": 0.333, "label": "a"}, {"score": 0.333, "label": "c"}, {"score": 0.333, "label": "b"}],
               ]     ,  )

           lowerCamelCase   :      List[Any]			 =					image_classifier([image] * 5     ,  candidate_labels=["A", "B", "C"]     ,  batch_size=2     )
           self.assertEqual(
               nested_simplify(UpperCamelCase__     )     ,  [
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
               ]     ,  )







    @require_tf
    def     _lowercase     (    self     )     ->      int:
           lowerCamelCase   :      str			 =					pipeline(
               model="hf-internal-testing/tiny-random-clip-zero-shot-image-classification"     ,  framework="tf"     )
           lowerCamelCase   :      int			 =					Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"     )
           lowerCamelCase   :      Dict			 =					image_classifier(UpperCamelCase__     ,  candidate_labels=["a", "b", "c"]     )

           self.assertEqual(
               nested_simplify(UpperCamelCase__     )     ,  [{"score": 0.333, "label": "a"}, {"score": 0.333, "label": "b"}, {"score": 0.333, "label": "c"}]     ,  )

           lowerCamelCase   :      str			 =					image_classifier([image] * 5     ,  candidate_labels=["A", "B", "C"]     ,  batch_size=2     )
           self.assertEqual(
               nested_simplify(UpperCamelCase__     )     ,  [
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
                   [
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                       {"score": 0.333, "label": ANY(UpperCamelCase__     )},
                   ],
               ]     ,  )







    @slow
    @require_torch
    def     _lowercase     (    self     )     ->      Optional[Any]:
           lowerCamelCase   :      int			 =					pipeline(
               task="zero-shot-image-classification"     ,  model="openai/clip-vit-base-patch32"     ,  )
           # This is an image of 2 cats with remotes and no planes
           lowerCamelCase   :      Union[str, Any]			 =					Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"     )
           lowerCamelCase   :      Optional[int]			 =					image_classifier(UpperCamelCase__     ,  candidate_labels=["cat", "plane", "remote"]     )

           self.assertEqual(
               nested_simplify(UpperCamelCase__     )     ,  [
                   {"score": 0.511, "label": "remote"},
                   {"score": 0.485, "label": "cat"},
                   {"score": 0.004, "label": "plane"},
               ]     ,  )

           lowerCamelCase   :      Tuple			 =					image_classifier([image] * 5     ,  candidate_labels=["cat", "plane", "remote"]     ,  batch_size=2     )
           self.assertEqual(
               nested_simplify(UpperCamelCase__     )     ,  [
                   [
                       {"score": 0.511, "label": "remote"},
                       {"score": 0.485, "label": "cat"},
                       {"score": 0.004, "label": "plane"},
                   ],
               ]
               * 5     ,  )







    @slow
    @require_tf
    def     _lowercase     (    self     )     ->      Tuple:
           lowerCamelCase   :      str			 =					pipeline(
               task="zero-shot-image-classification"     ,  model="openai/clip-vit-base-patch32"     ,  framework="tf"     )
           # This is an image of 2 cats with remotes and no planes
           lowerCamelCase   :      Any			 =					Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"     )
           lowerCamelCase   :      Tuple			 =					image_classifier(UpperCamelCase__     ,  candidate_labels=["cat", "plane", "remote"]     )
           self.assertEqual(
               nested_simplify(UpperCamelCase__     )     ,  [
                   {"score": 0.511, "label": "remote"},
                   {"score": 0.485, "label": "cat"},
                   {"score": 0.004, "label": "plane"},
               ]     ,  )

           lowerCamelCase   :      int			 =					image_classifier([image] * 5     ,  candidate_labels=["cat", "plane", "remote"]     ,  batch_size=2     )
           self.assertEqual(
               nested_simplify(UpperCamelCase__     )     ,  [
                   [
                       {"score": 0.511, "label": "remote"},
                       {"score": 0.485, "label": "cat"},
                       {"score": 0.004, "label": "plane"},
                   ],
               ]
               * 5     ,  )











'''simple docstring'''






from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


UpperCamelCase__:   str								=			{
    "configuration_lxmert": ["LXMERT_PRETRAINED_CONFIG_ARCHIVE_MAP", "LxmertConfig"],
    "tokenization_lxmert": ["LxmertTokenizer"],
}

try:
						if not is_tokenizers_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						UpperCamelCase__:   int								=			["LxmertTokenizerFast"]

try:
						if not is_torch_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						UpperCamelCase__:   Union[str, Any]								=			[
						    "LxmertEncoder",
						    "LxmertForPreTraining",
						    "LxmertForQuestionAnswering",
						    "LxmertModel",
						    "LxmertPreTrainedModel",
						    "LxmertVisualFeatureEncoder",
						    "LxmertXLayer",
						]

try:
						if not is_tf_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						UpperCamelCase__:   int								=			[
						    "TF_LXMERT_PRETRAINED_MODEL_ARCHIVE_LIST",
						    "TFLxmertForPreTraining",
						    "TFLxmertMainLayer",
						    "TFLxmertModel",
						    "TFLxmertPreTrainedModel",
						    "TFLxmertVisualFeatureEncoder",
						]


if TYPE_CHECKING:
						from .configuration_lxmert import LXMERT_PRETRAINED_CONFIG_ARCHIVE_MAP, LxmertConfig
						from .tokenization_lxmert import LxmertTokenizer

						try:
												if not is_tokenizers_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .tokenization_lxmert_fast import LxmertTokenizerFast

						try:
												if not is_torch_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_lxmert import (
												    LxmertEncoder,
												    LxmertForPreTraining,
												    LxmertForQuestionAnswering,
												    LxmertModel,
												    LxmertPreTrainedModel,
												    LxmertVisualFeatureEncoder,
												    LxmertXLayer,
												)

						try:
												if not is_tf_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_tf_lxmert import (
												    TF_LXMERT_PRETRAINED_MODEL_ARCHIVE_LIST,
												    TFLxmertForPreTraining,
												    TFLxmertMainLayer,
												    TFLxmertModel,
												    TFLxmertPreTrainedModel,
												    TFLxmertVisualFeatureEncoder,
												)

else:
						import sys

						UpperCamelCase__:   Tuple								=			_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)





