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







												@staticmethod
												def       UpperCAmelCase__					(						*snake_case__  :  Any      ,				**snake_case__  :  List[Any] ):
													"""simple docstring"""







													pass

@is_pipeline_test
@require_vision
@require_torch
class       a		(   unittest.TestCase					):
							lowercase_		:						List[Any]   							=  MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING







							def       UpperCAmelCase__					(						self  :  List[str]      ,				snake_case__  :  int      ,				snake_case__  :  Optional[Any]      ,				snake_case__  :  Optional[Any] ):
								"""simple docstring"""







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

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







							def       UpperCAmelCase__					(						self  :  Optional[int]      ,				snake_case__  :  List[Any]      ,				snake_case__  :  Union[str, Any] ):
								"""simple docstring"""







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

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







							@require_tf
							@unittest.skip("Zero Shot Object Detection not implemented in TF" )
							def       UpperCAmelCase__					(						self  :  Union[str, Any] ):
								"""simple docstring"""







								pass







							@require_torch
							def       UpperCAmelCase__					(						self  :  Dict ):
								"""simple docstring"""







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

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

								self.assertEqual(
								    nested_simplify(snake_case__      ,				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}},
								    ]      ,				)

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

								self.assertEqual(
								    nested_simplify(snake_case__      ,				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       UpperCAmelCase__					(						self  :  Any ):
								"""simple docstring"""







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

								__lowerCAmelCase         =							object_detector(
								    "http://images.cocodataset.org/val2017/000000039769.jpg"      ,				candidate_labels=["cat", "remote", "couch"]      ,				)
								self.assertEqual(
								    nested_simplify(snake_case__      ,				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}},
								    ]      ,				)

								__lowerCAmelCase         =							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(snake_case__      ,				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       UpperCAmelCase__					(						self  :  Union[str, Any] ):
								"""simple docstring"""







								pass







							@require_torch
							@slow
							def       UpperCAmelCase__					(						self  :  List[Any] ):
								"""simple docstring"""







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

								__lowerCAmelCase         =							object_detector(
								    "http://images.cocodataset.org/val2017/000000039769.jpg"      ,				candidate_labels=["cat", "remote", "couch"]      ,				threshold=snake_case__      ,				)
								self.assertEqual(
								    nested_simplify(snake_case__      ,				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       UpperCAmelCase__					(						self  :  Tuple ):
								"""simple docstring"""







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

								__lowerCAmelCase         =							object_detector(
								    "http://images.cocodataset.org/val2017/000000039769.jpg"      ,				candidate_labels=["cat", "remote", "couch"]      ,				top_k=snake_case__      ,				)
								self.assertEqual(
								    nested_simplify(snake_case__      ,				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 abc import ABC, abstractmethod
from argparse import ArgumentParser

class       a		(   __UpperCAmelCase					):







							@staticmethod
							@abstractmethod
							def       UpperCAmelCase__					(						snake_case__  :  ArgumentParser ):
								"""simple docstring"""







								raise NotImplementedError()







							@abstractmethod
							def       UpperCAmelCase__					(						self  :  Any ):
								"""simple docstring"""







								raise NotImplementedError()






