



import unittest

from transformers import MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING, is_vision_available, 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 		_lowercase		:

        @staticmethod
        def 		A							(      *__lowerCAmelCase			:       str							,   **__lowerCAmelCase			:       List[str]							)       ->				str:


         """simple docstring"""






         pass



@is_pipeline_test
@require_vision
@require_torch
class 		_lowercase		(       unittest.TestCase	):
   _UpperCAmelCase     	=			MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING

   def 		A							(      self			:       Tuple							,   __lowerCAmelCase			:       Tuple							,   __lowerCAmelCase			:       Optional[int]							,   __lowerCAmelCase			:       Optional[Any]							)       ->				Optional[Any]:


    """simple docstring"""






    a						=		pipeline(
        "zero-shot-object-detection"							,   model="hf-internal-testing/tiny-random-owlvit-object-detection"							)

    a						=		[
        {
            "image": "./tests/fixtures/tests_samples/COCO/000000039769.png",
            "candidate_labels": ["cat", "remote", "couch"],
        }
    ]
    return object_detector, examples

   def 		A							(      self			:       str							,   __lowerCAmelCase			:       Optional[Any]							,   __lowerCAmelCase			:       List[str]							)       ->				Union[str, Any]:


    """simple docstring"""






    a						=		object_detector(examples[0]							,   threshold=0.0							)

    a						=		len(__lowerCAmelCase							)
    self.assertGreater(__lowerCAmelCase							,   0							)
    self.assertEqual(
        __lowerCAmelCase							,   [
            {
                "score": ANY(__lowerCAmelCase							),
                "label": ANY(__lowerCAmelCase							),
                "box": {"xmin": ANY(__lowerCAmelCase							), "ymin": ANY(__lowerCAmelCase							), "xmax": ANY(__lowerCAmelCase							), "ymax": ANY(__lowerCAmelCase							)},
            }
            for i in range(__lowerCAmelCase							)
        ]							,   )

   @require_tf
   @unittest.skip("Zero Shot Object Detection not implemented in TF"							)
   def 		A							(      self			:       Any							)       ->				List[Any]:


    """simple docstring"""






    pass

   @require_torch
   def 		A							(      self			:       int							)       ->				Dict:


    """simple docstring"""






    a						=		pipeline(
        "zero-shot-object-detection"							,   model="hf-internal-testing/tiny-random-owlvit-object-detection"							)

    a						=		object_detector(
        "./tests/fixtures/tests_samples/COCO/000000039769.png"							,   candidate_labels=["cat", "remote", "couch"]							,   threshold=0.6_4							,   )

    self.assertEqual(
        nested_simplify(__lowerCAmelCase							,   decimals=4							)							,   [
            {"score": 0.7_2_3_5, "label": "cat", "box": {"xmin": 204, "ymin": 167, "xmax": 232, "ymax": 190}},
            {"score": 0.7_2_1_8, "label": "remote", "box": {"xmin": 204, "ymin": 167, "xmax": 232, "ymax": 190}},
            {"score": 0.7_1_8_4, "label": "couch", "box": {"xmin": 204, "ymin": 167, "xmax": 232, "ymax": 190}},
            {"score": 0.6_7_4_8, "label": "remote", "box": {"xmin": 571, "ymin": 83, "xmax": 598, "ymax": 103}},
            {"score": 0.6_6_5_6, "label": "cat", "box": {"xmin": 571, "ymin": 83, "xmax": 598, "ymax": 103}},
            {"score": 0.6_6_1_4, "label": "couch", "box": {"xmin": 571, "ymin": 83, "xmax": 598, "ymax": 103}},
            {"score": 0.6_4_5_6, "label": "remote", "box": {"xmin": 494, "ymin": 105, "xmax": 521, "ymax": 127}},
            {"score": 0.6_4_2, "label": "remote", "box": {"xmin": 67, "ymin": 274, "xmax": 93, "ymax": 297}},
            {"score": 0.6_4_1_9, "label": "cat", "box": {"xmin": 494, "ymin": 105, "xmax": 521, "ymax": 127}},
        ]							,   )

    a						=		object_detector(
        [
            {
                "image": "./tests/fixtures/tests_samples/COCO/000000039769.png",
                "candidate_labels": ["cat", "remote", "couch"],
            }
        ]							,   threshold=0.6_4							,   )

    self.assertEqual(
        nested_simplify(__lowerCAmelCase							,   decimals=4							)							,   [
            [
                {"score": 0.7_2_3_5, "label": "cat", "box": {"xmin": 204, "ymin": 167, "xmax": 232, "ymax": 190}},
                {"score": 0.7_2_1_8, "label": "remote", "box": {"xmin": 204, "ymin": 167, "xmax": 232, "ymax": 190}},
                {"score": 0.7_1_8_4, "label": "couch", "box": {"xmin": 204, "ymin": 167, "xmax": 232, "ymax": 190}},
                {"score": 0.6_7_4_8, "label": "remote", "box": {"xmin": 571, "ymin": 83, "xmax": 598, "ymax": 103}},
                {"score": 0.6_6_5_6, "label": "cat", "box": {"xmin": 571, "ymin": 83, "xmax": 598, "ymax": 103}},
                {"score": 0.6_6_1_4, "label": "couch", "box": {"xmin": 571, "ymin": 83, "xmax": 598, "ymax": 103}},
                {"score": 0.6_4_5_6, "label": "remote", "box": {"xmin": 494, "ymin": 105, "xmax": 521, "ymax": 127}},
                {"score": 0.6_4_2, "label": "remote", "box": {"xmin": 67, "ymin": 274, "xmax": 93, "ymax": 297}},
                {"score": 0.6_4_1_9, "label": "cat", "box": {"xmin": 494, "ymin": 105, "xmax": 521, "ymax": 127}},
            ]
        ]							,   )

   @require_torch
   @slow
   def 		A							(      self			:       str							)       ->				int:


    """simple docstring"""






    a						=		pipeline("zero-shot-object-detection"							)

    a						=		object_detector(
        "http://images.cocodataset.org/val2017/000000039769.jpg"							,   candidate_labels=["cat", "remote", "couch"]							,   )
    self.assertEqual(
        nested_simplify(__lowerCAmelCase							,   decimals=4							)							,   [
            {"score": 0.2_8_6_8, "label": "cat", "box": {"xmin": 324, "ymin": 20, "xmax": 640, "ymax": 373}},
            {"score": 0.2_7_7, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 177, "ymax": 115}},
            {"score": 0.2_5_3_7, "label": "cat", "box": {"xmin": 1, "ymin": 55, "xmax": 315, "ymax": 472}},
            {"score": 0.1_4_7_4, "label": "remote", "box": {"xmin": 335, "ymin": 74, "xmax": 371, "ymax": 187}},
            {"score": 0.1_2_0_8, "label": "couch", "box": {"xmin": 4, "ymin": 0, "xmax": 642, "ymax": 476}},
        ]							,   )

    a						=		object_detector(
        [
            {
                "image": "http://images.cocodataset.org/val2017/000000039769.jpg",
                "candidate_labels": ["cat", "remote", "couch"],
            },
            {
                "image": "http://images.cocodataset.org/val2017/000000039769.jpg",
                "candidate_labels": ["cat", "remote", "couch"],
            },
        ]							,   )
    self.assertEqual(
        nested_simplify(__lowerCAmelCase							,   decimals=4							)							,   [
            [
                {"score": 0.2_8_6_8, "label": "cat", "box": {"xmin": 324, "ymin": 20, "xmax": 640, "ymax": 373}},
                {"score": 0.2_7_7, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 177, "ymax": 115}},
                {"score": 0.2_5_3_7, "label": "cat", "box": {"xmin": 1, "ymin": 55, "xmax": 315, "ymax": 472}},
                {"score": 0.1_4_7_4, "label": "remote", "box": {"xmin": 335, "ymin": 74, "xmax": 371, "ymax": 187}},
                {"score": 0.1_2_0_8, "label": "couch", "box": {"xmin": 4, "ymin": 0, "xmax": 642, "ymax": 476}},
            ],
            [
                {"score": 0.2_8_6_8, "label": "cat", "box": {"xmin": 324, "ymin": 20, "xmax": 640, "ymax": 373}},
                {"score": 0.2_7_7, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 177, "ymax": 115}},
                {"score": 0.2_5_3_7, "label": "cat", "box": {"xmin": 1, "ymin": 55, "xmax": 315, "ymax": 472}},
                {"score": 0.1_4_7_4, "label": "remote", "box": {"xmin": 335, "ymin": 74, "xmax": 371, "ymax": 187}},
                {"score": 0.1_2_0_8, "label": "couch", "box": {"xmin": 4, "ymin": 0, "xmax": 642, "ymax": 476}},
            ],
        ]							,   )

   @require_tf
   @unittest.skip("Zero Shot Object Detection not implemented in TF"							)
   def 		A							(      self			:       Optional[Any]							)       ->				Tuple:


    """simple docstring"""






    pass

   @require_torch
   @slow
   def 		A							(      self			:       int							)       ->				Optional[int]:


    """simple docstring"""






    a						=		0.2
    a						=		pipeline("zero-shot-object-detection"							)

    a						=		object_detector(
        "http://images.cocodataset.org/val2017/000000039769.jpg"							,   candidate_labels=["cat", "remote", "couch"]							,   threshold=__lowerCAmelCase							,   )
    self.assertEqual(
        nested_simplify(__lowerCAmelCase							,   decimals=4							)							,   [
            {"score": 0.2_8_6_8, "label": "cat", "box": {"xmin": 324, "ymin": 20, "xmax": 640, "ymax": 373}},
            {"score": 0.2_7_7, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 177, "ymax": 115}},
            {"score": 0.2_5_3_7, "label": "cat", "box": {"xmin": 1, "ymin": 55, "xmax": 315, "ymax": 472}},
        ]							,   )




   @require_torch
   @slow
   def 		A							(      self			:       Dict							)       ->				Any:


    """simple docstring"""






    a						=		2
    a						=		pipeline("zero-shot-object-detection"							)

    a						=		object_detector(
        "http://images.cocodataset.org/val2017/000000039769.jpg"							,   candidate_labels=["cat", "remote", "couch"]							,   top_k=__lowerCAmelCase							,   )
    self.assertEqual(
        nested_simplify(__lowerCAmelCase							,   decimals=4							)							,   [
            {"score": 0.2_8_6_8, "label": "cat", "box": {"xmin": 324, "ymin": 20, "xmax": 640, "ymax": 373}},
            {"score": 0.2_7_7, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 177, "ymax": 115}},
        ]							,   )






from ...utils import (
    OptionalDependencyNotAvailable,
    is_torch_available,
    is_transformers_available,
    is_transformers_version,
)


try:
     if not (is_transformers_available() and is_torch_available() and is_transformers_version('''>=''', '''4.25.0''')):
          raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
     from ...utils.dummy_torch_and_transformers_objects import UnCLIPImageVariationPipeline, UnCLIPPipeline
else:
     from .pipeline_unclip import UnCLIPPipeline
     from .pipeline_unclip_image_variation import UnCLIPImageVariationPipeline
     from .text_proj import UnCLIPTextProjModel

