



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




           @staticmethod
           def 							A__      (						*__lowercase					:						Dict,					**__lowercase					:						List[str]						):
              pass
@is_pipeline_test
@require_vision
class 				_snake_case			(					unittest.TestCase):




    @require_torch
    def 							A__      (						self					:						Dict						):
       lowercase__					  =				pipeline(
           model="hf-internal-testing/tiny-random-clip-zero-shot-image-classification",					)
       lowercase__					  =				Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"						)
       lowercase__					  =				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"}],
           ],					)

       lowercase__					  =				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 							A__      (						self					:						Union[str, Any]						):
       lowercase__					  =				pipeline(
           model="hf-internal-testing/tiny-random-clip-zero-shot-image-classification",					framework="tf"						)
       lowercase__					  =				Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"						)
       lowercase__					  =				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"}],					)

       lowercase__					  =				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 							A__      (						self					:						Any						):
       lowercase__					  =				pipeline(
           task="zero-shot-image-classification",					model="openai/clip-vit-base-patch32",					)
       # This is an image of 2 cats with remotes and no planes
       lowercase__					  =				Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"						)
       lowercase__					  =				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"},
           ],					)

       lowercase__					  =				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 							A__      (						self					:						int						):
       lowercase__					  =				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
       lowercase__					  =				Image.open("./tests/fixtures/tests_samples/COCO/000000039769.png"						)
       lowercase__					  =				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"},
           ],					)

       lowercase__					  =				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,					)









from typing import TYPE_CHECKING

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


lowercase_								=     {
    """configuration_roberta_prelayernorm""": [
        """ROBERTA_PRELAYERNORM_PRETRAINED_CONFIG_ARCHIVE_MAP""",
        """RobertaPreLayerNormConfig""",
        """RobertaPreLayerNormOnnxConfig""",
    ],
}

try:
							if not is_torch_available():
														raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
							pass
else:
							lowercase_								=     [
							    """ROBERTA_PRELAYERNORM_PRETRAINED_MODEL_ARCHIVE_LIST""",
							    """RobertaPreLayerNormForCausalLM""",
							    """RobertaPreLayerNormForMaskedLM""",
							    """RobertaPreLayerNormForMultipleChoice""",
							    """RobertaPreLayerNormForQuestionAnswering""",
							    """RobertaPreLayerNormForSequenceClassification""",
							    """RobertaPreLayerNormForTokenClassification""",
							    """RobertaPreLayerNormModel""",
							    """RobertaPreLayerNormPreTrainedModel""",
							]

try:
							if not is_tf_available():
														raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
							pass
else:
							lowercase_								=     [
							    """TF_ROBERTA_PRELAYERNORM_PRETRAINED_MODEL_ARCHIVE_LIST""",
							    """TFRobertaPreLayerNormForCausalLM""",
							    """TFRobertaPreLayerNormForMaskedLM""",
							    """TFRobertaPreLayerNormForMultipleChoice""",
							    """TFRobertaPreLayerNormForQuestionAnswering""",
							    """TFRobertaPreLayerNormForSequenceClassification""",
							    """TFRobertaPreLayerNormForTokenClassification""",
							    """TFRobertaPreLayerNormMainLayer""",
							    """TFRobertaPreLayerNormModel""",
							    """TFRobertaPreLayerNormPreTrainedModel""",
							]

try:
							if not is_flax_available():
														raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
							pass
else:
							lowercase_								=     [
							    """FlaxRobertaPreLayerNormForCausalLM""",
							    """FlaxRobertaPreLayerNormForMaskedLM""",
							    """FlaxRobertaPreLayerNormForMultipleChoice""",
							    """FlaxRobertaPreLayerNormForQuestionAnswering""",
							    """FlaxRobertaPreLayerNormForSequenceClassification""",
							    """FlaxRobertaPreLayerNormForTokenClassification""",
							    """FlaxRobertaPreLayerNormModel""",
							    """FlaxRobertaPreLayerNormPreTrainedModel""",
							]


if TYPE_CHECKING:
							from .configuration_roberta_prelayernorm import (
							    ROBERTA_PRELAYERNORM_PRETRAINED_CONFIG_ARCHIVE_MAP,
							    RobertaPreLayerNormConfig,
							    RobertaPreLayerNormOnnxConfig,
							)

							try:
														if not is_torch_available():
																					raise OptionalDependencyNotAvailable()
							except OptionalDependencyNotAvailable:
														pass
							else:
														from .modeling_roberta_prelayernorm import (
														    ROBERTA_PRELAYERNORM_PRETRAINED_MODEL_ARCHIVE_LIST,
														    RobertaPreLayerNormForCausalLM,
														    RobertaPreLayerNormForMaskedLM,
														    RobertaPreLayerNormForMultipleChoice,
														    RobertaPreLayerNormForQuestionAnswering,
														    RobertaPreLayerNormForSequenceClassification,
														    RobertaPreLayerNormForTokenClassification,
														    RobertaPreLayerNormModel,
														    RobertaPreLayerNormPreTrainedModel,
														)

							try:
														if not is_tf_available():
																					raise OptionalDependencyNotAvailable()
							except OptionalDependencyNotAvailable:
														pass
							else:
														from .modeling_tf_roberta_prelayernorm import (
														    TF_ROBERTA_PRELAYERNORM_PRETRAINED_MODEL_ARCHIVE_LIST,
														    TFRobertaPreLayerNormForCausalLM,
														    TFRobertaPreLayerNormForMaskedLM,
														    TFRobertaPreLayerNormForMultipleChoice,
														    TFRobertaPreLayerNormForQuestionAnswering,
														    TFRobertaPreLayerNormForSequenceClassification,
														    TFRobertaPreLayerNormForTokenClassification,
														    TFRobertaPreLayerNormMainLayer,
														    TFRobertaPreLayerNormModel,
														    TFRobertaPreLayerNormPreTrainedModel,
														)

							try:
														if not is_flax_available():
																					raise OptionalDependencyNotAvailable()
							except OptionalDependencyNotAvailable:
														pass
							else:
														from .modeling_flax_roberta_prelayernorm import (
														    FlaxRobertaPreLayerNormForCausalLM,
														    FlaxRobertaPreLayerNormForMaskedLM,
														    FlaxRobertaPreLayerNormForMultipleChoice,
														    FlaxRobertaPreLayerNormForQuestionAnswering,
														    FlaxRobertaPreLayerNormForSequenceClassification,
														    FlaxRobertaPreLayerNormForTokenClassification,
														    FlaxRobertaPreLayerNormModel,
														    FlaxRobertaPreLayerNormPreTrainedModel,
														)

else:
							import sys

							lowercase_								=     _LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)




