



"""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    __UpperCAmelCase    (       *__lowerCamelCase    :	List[str]							,       **__lowerCamelCase    :	Any				):



          """simple docstring"""
          pass



@is_pipeline_test
@require_vision
@require_torch
class     UpperCAmelCase    (	unittest.TestCase  ):
   A__		:	Tuple           =  MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING



   def    __UpperCAmelCase    (       self    :	int							,       __lowerCamelCase    :	Any							,       __lowerCamelCase    :	Any							,       __lowerCamelCase    :	Any				):



     """simple docstring"""
     _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    __UpperCAmelCase    (       self    :	Dict							,       __lowerCamelCase    :	Dict							,       __lowerCamelCase    :	List[str]				):



     """simple docstring"""
     _snake_case   	=      object_detector(examples[0]							,       threshold=0.0				)

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



   @require_tf
   @unittest.skip('''Zero Shot Object Detection not implemented in TF'''				)
   def    __UpperCAmelCase    (       self    :	Tuple				):



     """simple docstring"""
     pass



   @require_torch
   def    __UpperCAmelCase    (       self    :	List[Any]				):



     """simple docstring"""
     _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.6_4							,       )

     self.assertEqual(
         nested_simplify(__UpperCAmelCase							,       decimals=4				)							,       [
             {'''score''': 0.7_2_3_5, '''label''': '''cat''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
             {'''score''': 0.7_2_1_8, '''label''': '''remote''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
             {'''score''': 0.7_1_8_4, '''label''': '''couch''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
             {'''score''': 0.6_7_4_8, '''label''': '''remote''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
             {'''score''': 0.6_6_5_6, '''label''': '''cat''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
             {'''score''': 0.6_6_1_4, '''label''': '''couch''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
             {'''score''': 0.6_4_5_6, '''label''': '''remote''', '''box''': {'''xmin''': 4_9_4, '''ymin''': 1_0_5, '''xmax''': 5_2_1, '''ymax''': 1_2_7}},
             {'''score''': 0.6_4_2, '''label''': '''remote''', '''box''': {'''xmin''': 6_7, '''ymin''': 2_7_4, '''xmax''': 9_3, '''ymax''': 2_9_7}},
             {'''score''': 0.6_4_1_9, '''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.6_4							,       )

     self.assertEqual(
         nested_simplify(__UpperCAmelCase							,       decimals=4				)							,       [
             [
                 {'''score''': 0.7_2_3_5, '''label''': '''cat''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
                 {'''score''': 0.7_2_1_8, '''label''': '''remote''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
                 {'''score''': 0.7_1_8_4, '''label''': '''couch''', '''box''': {'''xmin''': 2_0_4, '''ymin''': 1_6_7, '''xmax''': 2_3_2, '''ymax''': 1_9_0}},
                 {'''score''': 0.6_7_4_8, '''label''': '''remote''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
                 {'''score''': 0.6_6_5_6, '''label''': '''cat''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
                 {'''score''': 0.6_6_1_4, '''label''': '''couch''', '''box''': {'''xmin''': 5_7_1, '''ymin''': 8_3, '''xmax''': 5_9_8, '''ymax''': 1_0_3}},
                 {'''score''': 0.6_4_5_6, '''label''': '''remote''', '''box''': {'''xmin''': 4_9_4, '''ymin''': 1_0_5, '''xmax''': 5_2_1, '''ymax''': 1_2_7}},
                 {'''score''': 0.6_4_2, '''label''': '''remote''', '''box''': {'''xmin''': 6_7, '''ymin''': 2_7_4, '''xmax''': 9_3, '''ymax''': 2_9_7}},
                 {'''score''': 0.6_4_1_9, '''label''': '''cat''', '''box''': {'''xmin''': 4_9_4, '''ymin''': 1_0_5, '''xmax''': 5_2_1, '''ymax''': 1_2_7}},
             ]
         ]							,       )



   @require_torch
   @slow
   def    __UpperCAmelCase    (       self    :	List[str]				):



     """simple docstring"""
     _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(__UpperCAmelCase							,       decimals=4				)							,       [
             {'''score''': 0.2_8_6_8, '''label''': '''cat''', '''box''': {'''xmin''': 3_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
             {'''score''': 0.2_7_7, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
             {'''score''': 0.2_5_3_7, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 5_5, '''xmax''': 3_1_5, '''ymax''': 4_7_2}},
             {'''score''': 0.1_4_7_4, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_5, '''ymin''': 7_4, '''xmax''': 3_7_1, '''ymax''': 1_8_7}},
             {'''score''': 0.1_2_0_8, '''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(__UpperCAmelCase							,       decimals=4				)							,       [
             [
                 {'''score''': 0.2_8_6_8, '''label''': '''cat''', '''box''': {'''xmin''': 3_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
                 {'''score''': 0.2_7_7, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
                 {'''score''': 0.2_5_3_7, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 5_5, '''xmax''': 3_1_5, '''ymax''': 4_7_2}},
                 {'''score''': 0.1_4_7_4, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_5, '''ymin''': 7_4, '''xmax''': 3_7_1, '''ymax''': 1_8_7}},
                 {'''score''': 0.1_2_0_8, '''label''': '''couch''', '''box''': {'''xmin''': 4, '''ymin''': 0, '''xmax''': 6_4_2, '''ymax''': 4_7_6}},
             ],
             [
                 {'''score''': 0.2_8_6_8, '''label''': '''cat''', '''box''': {'''xmin''': 3_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
                 {'''score''': 0.2_7_7, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
                 {'''score''': 0.2_5_3_7, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 5_5, '''xmax''': 3_1_5, '''ymax''': 4_7_2}},
                 {'''score''': 0.1_4_7_4, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_5, '''ymin''': 7_4, '''xmax''': 3_7_1, '''ymax''': 1_8_7}},
                 {'''score''': 0.1_2_0_8, '''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    __UpperCAmelCase    (       self    :	Dict				):



     """simple docstring"""
     pass



   @require_torch
   @slow
   def    __UpperCAmelCase    (       self    :	List[str]				):



     """simple docstring"""
     _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=__UpperCAmelCase							,       )
     self.assertEqual(
         nested_simplify(__UpperCAmelCase							,       decimals=4				)							,       [
             {'''score''': 0.2_8_6_8, '''label''': '''cat''', '''box''': {'''xmin''': 3_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
             {'''score''': 0.2_7_7, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
             {'''score''': 0.2_5_3_7, '''label''': '''cat''', '''box''': {'''xmin''': 1, '''ymin''': 5_5, '''xmax''': 3_1_5, '''ymax''': 4_7_2}},
         ]							,       )





   @require_torch
   @slow
   def    __UpperCAmelCase    (       self    :	List[Any]				):



     """simple docstring"""
     _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=__UpperCAmelCase							,       )
     self.assertEqual(
         nested_simplify(__UpperCAmelCase							,       decimals=4				)							,       [
             {'''score''': 0.2_8_6_8, '''label''': '''cat''', '''box''': {'''xmin''': 3_2_4, '''ymin''': 2_0, '''xmax''': 6_4_0, '''ymax''': 3_7_3}},
             {'''score''': 0.2_7_7, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_2, '''xmax''': 1_7_7, '''ymax''': 1_1_5}},
         ]							,       )













def     a_   (__A				,       __A				,       __A				,       __A      )				->						int:



					"""simple docstring"""
					__a      ,			__a					:						Any      =					len(__A      ), len(grid[0]      )
					if (
					    min(__A				,       __A      ) < 0
					    or row == row_length
					    or col == col_length
					    or (row, col) in visit
					    or grid[row][col] == 1
					):
										return 0
					if row == row_length - 1 and col == col_length - 1:
										return 1

					visit.add((row, col)      )

					__a					:						Dict      =					0
					count += depth_first_search(__A				,       row + 1				,       __A				,       __A      )
					count += depth_first_search(__A				,       row - 1				,       __A				,       __A      )
					count += depth_first_search(__A				,       __A				,       col + 1				,       __A      )
					count += depth_first_search(__A				,       __A				,       col - 1				,       __A      )

					visit.remove((row, col)      )
					return count


if __name__ == "__main__":
			import doctest

			doctest.testmod()





