


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







      """simple docstring"""

      @staticmethod
      def 		a_      (	*__snake_case      , **__snake_case   ):
           pass

@is_pipeline_test
@require_vision
@require_torch
class   A__ (   unittest.TestCase     ):







     """simple docstring"""

     __magic_name__        =		MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING
     def 		a_      (	self      , __snake_case      , __snake_case      , __snake_case   ):
          snake_case					=    pipeline(
              '''zero-shot-object-detection'''      , model='''hf-internal-testing/tiny-random-owlvit-object-detection'''   )

          snake_case					=    [
              {
                  '''image''': '''./tests/fixtures/tests_samples/COCO/000000039769.png''',
                  '''candidate_labels''': ['''cat''', '''remote''', '''couch'''],
              }
          ]
          return object_detector, examples
     def 		a_      (	self      , __snake_case      , __snake_case   ):
          snake_case					=    object_detector(examples[0]      , threshold=0.0   )

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

          snake_case					=    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_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
                  {'''score''': 0.7218, '''label''': '''remote''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
                  {'''score''': 0.7184, '''label''': '''couch''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
                  {'''score''': 0.6748, '''label''': '''remote''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
                  {'''score''': 0.6656, '''label''': '''cat''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
                  {'''score''': 0.6614, '''label''': '''couch''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
                  {'''score''': 0.6456, '''label''': '''remote''', '''box''': {'''xmin''': 4_9_4, '''ymin''': 1_0_5, '''xmax''': 5_2_1, '''ymax''': 1_2_7}},
                  {'''score''': 0.642, '''label''': '''remote''', '''box''': {'''xmin''': 6_7, '''ymin''': 2_7_4, '''xmax''': 9_3, '''ymax''': 2_9_7}},
                  {'''score''': 0.6419, '''label''': '''cat''', '''box''': {'''xmin''': 4_9_4, '''ymin''': 1_0_5, '''xmax''': 5_2_1, '''ymax''': 1_2_7}},
              ]      , )

          snake_case					=    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_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
                      {'''score''': 0.7218, '''label''': '''remote''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
                      {'''score''': 0.7184, '''label''': '''couch''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
                      {'''score''': 0.6748, '''label''': '''remote''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
                      {'''score''': 0.6656, '''label''': '''cat''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
                      {'''score''': 0.6614, '''label''': '''couch''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
                      {'''score''': 0.6456, '''label''': '''remote''', '''box''': {'''xmin''': 4_9_4, '''ymin''': 1_0_5, '''xmax''': 5_2_1, '''ymax''': 1_2_7}},
                      {'''score''': 0.642, '''label''': '''remote''', '''box''': {'''xmin''': 6_7, '''ymin''': 2_7_4, '''xmax''': 9_3, '''ymax''': 2_9_7}},
                      {'''score''': 0.6419, '''label''': '''cat''', '''box''': {'''xmin''': 4_9_4, '''ymin''': 1_0_5, '''xmax''': 5_2_1, '''ymax''': 1_2_7}},
                  ]
              ]      , )
     @require_torch
     @slow
     def 		a_      (	self   ):
          snake_case					=    pipeline('''zero-shot-object-detection'''   )

          snake_case					=    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_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
                  {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
                  {'''score''': 0.2537, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 5_5, '''xmax''': 3_1_5, '''ymax''': 4_7_2}},
                  {'''score''': 0.1474, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_5, '''ymin''': 7_4, '''xmax''': 3_7_1, '''ymax''': 1_8_7}},
                  {'''score''': 0.1208, '''label''': '''couch''', '''box''': {'''xmin''': 4, '''ymin''': 0, '''xmax''': 6_4_2, '''ymax''': 4_7_6}},
              ]      , )

          snake_case					=    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_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
                      {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
                      {'''score''': 0.2537, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 5_5, '''xmax''': 3_1_5, '''ymax''': 4_7_2}},
                      {'''score''': 0.1474, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_5, '''ymin''': 7_4, '''xmax''': 3_7_1, '''ymax''': 1_8_7}},
                      {'''score''': 0.1208, '''label''': '''couch''', '''box''': {'''xmin''': 4, '''ymin''': 0, '''xmax''': 6_4_2, '''ymax''': 4_7_6}},
                  ],
                  [
                      {'''score''': 0.2868, '''label''': '''cat''', '''box''': {'''xmin''': 3_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
                      {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
                      {'''score''': 0.2537, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 5_5, '''xmax''': 3_1_5, '''ymax''': 4_7_2}},
                      {'''score''': 0.1474, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_5, '''ymin''': 7_4, '''xmax''': 3_7_1, '''ymax''': 1_8_7}},
                      {'''score''': 0.1208, '''label''': '''couch''', '''box''': {'''xmin''': 4, '''ymin''': 0, '''xmax''': 6_4_2, '''ymax''': 4_7_6}},
                  ],
              ]      , )
     @require_tf
     @unittest.skip('''Zero Shot Object Detection not implemented in TF'''   )
     def 		a_      (	self   ):
          pass
     @require_torch
     @slow
     def 		a_      (	self   ):
          snake_case					=    0.2
          snake_case					=    pipeline('''zero-shot-object-detection'''   )

          snake_case					=    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_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
                  {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
                  {'''score''': 0.2537, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 5_5, '''xmax''': 3_1_5, '''ymax''': 4_7_2}},
              ]      , )




     @require_torch
     @slow
     def 		a_      (	self   ):
          snake_case					=    2
          snake_case					=    pipeline('''zero-shot-object-detection'''   )

          snake_case					=    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_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
                  {'''score''': 0.277, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
              ]      , )








# tests directory-specific settings - this file is run automatically
# by pytest before any tests are run

import sys
import warnings
from os.path import abspath, dirname, join


# allow having multiple repository checkouts and not needing to remember to rerun
# 'pip install -e .[dev]' when switching between checkouts and running tests.
_SCREAMING_SNAKE_CASE      :			Union[str, Any]      				=   abspath(join(dirname(dirname(dirname(__file__))), "src"))
sys.path.insert(1, git_repo_path)


# silence FutureWarning warnings in tests since often we can't act on them until
# they become normal warnings - i.e. the tests still need to test the current functionality
warnings.simplefilter(action="ignore", category=FutureWarning)
def       UpperCAmelCase__						(UpperCamelCase_    ):



     """simple docstring"""






     from transformers.testing_utils import pytest_addoption_shared

     pytest_addoption_shared(UpperCamelCase_    )

def       UpperCAmelCase__						(UpperCamelCase_    ):



     """simple docstring"""






     from transformers.testing_utils import pytest_terminal_summary_main

     snake_case					=    terminalreporter.config.getoption('''--make-reports'''    )
     if make_reports:
          pytest_terminal_summary_main(UpperCamelCase_							,id=UpperCamelCase_    )




