
"""simple docstring"""
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      _UpperCAmelCase				:
        @staticmethod
        def 					lowerCamelCase__	(    *snake_case_						,    **snake_case_     ):
          pass






@is_pipeline_test
@require_vision
@require_torch
class      _UpperCAmelCase				(					unittest.TestCase):
    __lowercase							: str  =					MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING
    def 					lowerCamelCase__	(    self						,    snake_case_						,    snake_case_						,    snake_case_     ):
      _snake_case     :						str						=   pipeline(
          "zero-shot-object-detection"						,    model="hf-internal-testing/tiny-random-owlvit-object-detection"     )

      _snake_case     :						int						=   [
          {
              "image": "./tests/fixtures/tests_samples/COCO/000000039769.png",
              "candidate_labels": ["cat", "remote", "couch"],
          }
      ]
      return object_detector, examples
    def 					lowerCamelCase__	(    self						,    snake_case_						,    snake_case_     ):
      _snake_case     :						Optional[int]						=   object_detector(examples[0]						,    threshold=0.0     )

      _snake_case     :						Tuple						=   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 					lowerCamelCase__	(    self     ):
      pass
    @require_torch
    def 					lowerCamelCase__	(    self     ):
      _snake_case     :						Tuple						=   pipeline(
          "zero-shot-object-detection"						,    model="hf-internal-testing/tiny-random-owlvit-object-detection"     )

      _snake_case     :						Any						=   object_detector(
          "./tests/fixtures/tests_samples/COCO/000000039769.png"						,    candidate_labels=["cat", "remote", "couch"]						,    threshold=0.64						,    )

      self.assertEqual(
          nested_simplify(lowerCAmelCase_						,    decimals=4     )						,    [
              {"score": 0.7235, "label": "cat", "box": {"xmin": 2_04, "ymin": 1_67, "xmax": 2_32, "ymax": 1_90}},
              {"score": 0.7218, "label": "remote", "box": {"xmin": 2_04, "ymin": 1_67, "xmax": 2_32, "ymax": 1_90}},
              {"score": 0.7184, "label": "couch", "box": {"xmin": 2_04, "ymin": 1_67, "xmax": 2_32, "ymax": 1_90}},
              {"score": 0.6748, "label": "remote", "box": {"xmin": 5_71, "ymin": 83, "xmax": 5_98, "ymax": 1_03}},
              {"score": 0.6656, "label": "cat", "box": {"xmin": 5_71, "ymin": 83, "xmax": 5_98, "ymax": 1_03}},
              {"score": 0.6614, "label": "couch", "box": {"xmin": 5_71, "ymin": 83, "xmax": 5_98, "ymax": 1_03}},
              {"score": 0.6456, "label": "remote", "box": {"xmin": 4_94, "ymin": 1_05, "xmax": 5_21, "ymax": 1_27}},
              {"score": 0.642, "label": "remote", "box": {"xmin": 67, "ymin": 2_74, "xmax": 93, "ymax": 2_97}},
              {"score": 0.6419, "label": "cat", "box": {"xmin": 4_94, "ymin": 1_05, "xmax": 5_21, "ymax": 1_27}},
          ]						,    )

      _snake_case     :						List[Any]						=   object_detector(
          [
              {
                  "image": "./tests/fixtures/tests_samples/COCO/000000039769.png",
                  "candidate_labels": ["cat", "remote", "couch"],
              }
          ]						,    threshold=0.64						,    )

      self.assertEqual(
          nested_simplify(lowerCAmelCase_						,    decimals=4     )						,    [
              [
                  {"score": 0.7235, "label": "cat", "box": {"xmin": 2_04, "ymin": 1_67, "xmax": 2_32, "ymax": 1_90}},
                  {"score": 0.7218, "label": "remote", "box": {"xmin": 2_04, "ymin": 1_67, "xmax": 2_32, "ymax": 1_90}},
                  {"score": 0.7184, "label": "couch", "box": {"xmin": 2_04, "ymin": 1_67, "xmax": 2_32, "ymax": 1_90}},
                  {"score": 0.6748, "label": "remote", "box": {"xmin": 5_71, "ymin": 83, "xmax": 5_98, "ymax": 1_03}},
                  {"score": 0.6656, "label": "cat", "box": {"xmin": 5_71, "ymin": 83, "xmax": 5_98, "ymax": 1_03}},
                  {"score": 0.6614, "label": "couch", "box": {"xmin": 5_71, "ymin": 83, "xmax": 5_98, "ymax": 1_03}},
                  {"score": 0.6456, "label": "remote", "box": {"xmin": 4_94, "ymin": 1_05, "xmax": 5_21, "ymax": 1_27}},
                  {"score": 0.642, "label": "remote", "box": {"xmin": 67, "ymin": 2_74, "xmax": 93, "ymax": 2_97}},
                  {"score": 0.6419, "label": "cat", "box": {"xmin": 4_94, "ymin": 1_05, "xmax": 5_21, "ymax": 1_27}},
              ]
          ]						,    )
    @require_torch
    @slow
    def 					lowerCamelCase__	(    self     ):
      _snake_case     :						Any						=   pipeline("zero-shot-object-detection"     )

      _snake_case     :						Tuple						=   object_detector(
          "http://images.cocodataset.org/val2017/000000039769.jpg"						,    candidate_labels=["cat", "remote", "couch"]						,    )
      self.assertEqual(
          nested_simplify(lowerCAmelCase_						,    decimals=4     )						,    [
              {"score": 0.2868, "label": "cat", "box": {"xmin": 3_24, "ymin": 20, "xmax": 6_40, "ymax": 3_73}},
              {"score": 0.277, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 1_77, "ymax": 1_15}},
              {"score": 0.2537, "label": "cat", "box": {"xmin": 1, "ymin": 55, "xmax": 3_15, "ymax": 4_72}},
              {"score": 0.1474, "label": "remote", "box": {"xmin": 3_35, "ymin": 74, "xmax": 3_71, "ymax": 1_87}},
              {"score": 0.1208, "label": "couch", "box": {"xmin": 4, "ymin": 0, "xmax": 6_42, "ymax": 4_76}},
          ]						,    )

      _snake_case     :						int						=   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.2868, "label": "cat", "box": {"xmin": 3_24, "ymin": 20, "xmax": 6_40, "ymax": 3_73}},
                  {"score": 0.277, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 1_77, "ymax": 1_15}},
                  {"score": 0.2537, "label": "cat", "box": {"xmin": 1, "ymin": 55, "xmax": 3_15, "ymax": 4_72}},
                  {"score": 0.1474, "label": "remote", "box": {"xmin": 3_35, "ymin": 74, "xmax": 3_71, "ymax": 1_87}},
                  {"score": 0.1208, "label": "couch", "box": {"xmin": 4, "ymin": 0, "xmax": 6_42, "ymax": 4_76}},
              ],
              [
                  {"score": 0.2868, "label": "cat", "box": {"xmin": 3_24, "ymin": 20, "xmax": 6_40, "ymax": 3_73}},
                  {"score": 0.277, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 1_77, "ymax": 1_15}},
                  {"score": 0.2537, "label": "cat", "box": {"xmin": 1, "ymin": 55, "xmax": 3_15, "ymax": 4_72}},
                  {"score": 0.1474, "label": "remote", "box": {"xmin": 3_35, "ymin": 74, "xmax": 3_71, "ymax": 1_87}},
                  {"score": 0.1208, "label": "couch", "box": {"xmin": 4, "ymin": 0, "xmax": 6_42, "ymax": 4_76}},
              ],
          ]						,    )
    @require_tf
    @unittest.skip("Zero Shot Object Detection not implemented in TF"     )
    def 					lowerCamelCase__	(    self     ):
      pass
    @require_torch
    @slow
    def 					lowerCamelCase__	(    self     ):
      _snake_case     :						Dict						=   0.2
      _snake_case     :						List[Any]						=   pipeline("zero-shot-object-detection"     )

      _snake_case     :						Optional[int]						=   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.2868, "label": "cat", "box": {"xmin": 3_24, "ymin": 20, "xmax": 6_40, "ymax": 3_73}},
              {"score": 0.277, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 1_77, "ymax": 1_15}},
              {"score": 0.2537, "label": "cat", "box": {"xmin": 1, "ymin": 55, "xmax": 3_15, "ymax": 4_72}},
          ]						,    )


    @require_torch
    @slow
    def 					lowerCamelCase__	(    self     ):
      _snake_case     :						List[str]						=   2
      _snake_case     :						Union[str, Any]						=   pipeline("zero-shot-object-detection"     )

      _snake_case     :						List[Any]						=   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.2868, "label": "cat", "box": {"xmin": 3_24, "ymin": 20, "xmax": 6_40, "ymax": 3_73}},
              {"score": 0.277, "label": "remote", "box": {"xmin": 40, "ymin": 72, "xmax": 1_77, "ymax": 1_15}},
          ]						,    )








"""simple docstring"""
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

