

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							(      *snake_case   ,     **snake_case ):
																pass







@is_pipeline_test
@require_vision
@require_torch
class 				lowercase       ( unittest.TestCase    ):
				__SCREAMING_SNAKE_CASE      :				Any     =    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(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 					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(snake_case   ,     decimals=4 )   ,     [
											        {'score': 0.72_35, 'label': 'cat', 'box': {'xmin': 204, 'ymin': 167, 'xmax': 232, 'ymax': 190}},
											        {'score': 0.72_18, 'label': 'remote', 'box': {'xmin': 204, 'ymin': 167, 'xmax': 232, 'ymax': 190}},
											        {'score': 0.71_84, 'label': 'couch', 'box': {'xmin': 204, 'ymin': 167, 'xmax': 232, 'ymax': 190}},
											        {'score': 0.67_48, 'label': 'remote', 'box': {'xmin': 571, 'ymin': 83, 'xmax': 598, 'ymax': 103}},
											        {'score': 0.66_56, 'label': 'cat', 'box': {'xmin': 571, 'ymin': 83, 'xmax': 598, 'ymax': 103}},
											        {'score': 0.66_14, 'label': 'couch', 'box': {'xmin': 571, 'ymin': 83, 'xmax': 598, 'ymax': 103}},
											        {'score': 0.64_56, 'label': 'remote', 'box': {'xmin': 494, 'ymin': 105, 'xmax': 521, 'ymax': 127}},
											        {'score': 0.6_42, 'label': 'remote', 'box': {'xmin': 67, 'ymin': 274, 'xmax': 93, 'ymax': 297}},
											        {'score': 0.64_19, 'label': 'cat', 'box': {'xmin': 494, 'ymin': 105, 'xmax': 521, 'ymax': 127}},
											    ]   ,     )

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

											self.assertEqual(
											    nested_simplify(snake_case   ,     decimals=4 )   ,     [
											        [
											            {'score': 0.72_35, 'label': 'cat', 'box': {'xmin': 204, 'ymin': 167, 'xmax': 232, 'ymax': 190}},
											            {'score': 0.72_18, 'label': 'remote', 'box': {'xmin': 204, 'ymin': 167, 'xmax': 232, 'ymax': 190}},
											            {'score': 0.71_84, 'label': 'couch', 'box': {'xmin': 204, 'ymin': 167, 'xmax': 232, 'ymax': 190}},
											            {'score': 0.67_48, 'label': 'remote', 'box': {'xmin': 571, 'ymin': 83, 'xmax': 598, 'ymax': 103}},
											            {'score': 0.66_56, 'label': 'cat', 'box': {'xmin': 571, 'ymin': 83, 'xmax': 598, 'ymax': 103}},
											            {'score': 0.66_14, 'label': 'couch', 'box': {'xmin': 571, 'ymin': 83, 'xmax': 598, 'ymax': 103}},
											            {'score': 0.64_56, 'label': 'remote', 'box': {'xmin': 494, 'ymin': 105, 'xmax': 521, 'ymax': 127}},
											            {'score': 0.6_42, 'label': 'remote', 'box': {'xmin': 67, 'ymin': 274, 'xmax': 93, 'ymax': 297}},
											            {'score': 0.64_19, 'label': 'cat', 'box': {'xmin': 494, 'ymin': 105, 'xmax': 521, 'ymax': 127}},
											        ]
											    ]   ,     )




				@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(snake_case   ,     decimals=4 )   ,     [
											        {'score': 0.28_68, 'label': 'cat', 'box': {'xmin': 324, 'ymin': 20, 'xmax': 640, 'ymax': 373}},
											        {'score': 0.2_77, 'label': 'remote', 'box': {'xmin': 40, 'ymin': 72, 'xmax': 177, 'ymax': 115}},
											        {'score': 0.25_37, 'label': 'cat', 'box': {'xmin': 1, 'ymin': 55, 'xmax': 315, 'ymax': 472}},
											        {'score': 0.14_74, 'label': 'remote', 'box': {'xmin': 335, 'ymin': 74, 'xmax': 371, 'ymax': 187}},
											        {'score': 0.12_08, 'label': 'couch', 'box': {'xmin': 4, 'ymin': 0, 'xmax': 642, 'ymax': 476}},
											    ]   ,     )

											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(snake_case   ,     decimals=4 )   ,     [
											        [
											            {'score': 0.28_68, 'label': 'cat', 'box': {'xmin': 324, 'ymin': 20, 'xmax': 640, 'ymax': 373}},
											            {'score': 0.2_77, 'label': 'remote', 'box': {'xmin': 40, 'ymin': 72, 'xmax': 177, 'ymax': 115}},
											            {'score': 0.25_37, 'label': 'cat', 'box': {'xmin': 1, 'ymin': 55, 'xmax': 315, 'ymax': 472}},
											            {'score': 0.14_74, 'label': 'remote', 'box': {'xmin': 335, 'ymin': 74, 'xmax': 371, 'ymax': 187}},
											            {'score': 0.12_08, 'label': 'couch', 'box': {'xmin': 4, 'ymin': 0, 'xmax': 642, 'ymax': 476}},
											        ],
											        [
											            {'score': 0.28_68, 'label': 'cat', 'box': {'xmin': 324, 'ymin': 20, 'xmax': 640, 'ymax': 373}},
											            {'score': 0.2_77, 'label': 'remote', 'box': {'xmin': 40, 'ymin': 72, 'xmax': 177, 'ymax': 115}},
											            {'score': 0.25_37, 'label': 'cat', 'box': {'xmin': 1, 'ymin': 55, 'xmax': 315, 'ymax': 472}},
											            {'score': 0.14_74, 'label': 'remote', 'box': {'xmin': 335, 'ymin': 74, 'xmax': 371, 'ymax': 187}},
											            {'score': 0.12_08, '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 ):
											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=snake_case   ,     )
											self.assertEqual(
											    nested_simplify(snake_case   ,     decimals=4 )   ,     [
											        {'score': 0.28_68, 'label': 'cat', 'box': {'xmin': 324, 'ymin': 20, 'xmax': 640, 'ymax': 373}},
											        {'score': 0.2_77, 'label': 'remote', 'box': {'xmin': 40, 'ymin': 72, 'xmax': 177, 'ymax': 115}},
											        {'score': 0.25_37, 'label': 'cat', 'box': {'xmin': 1, 'ymin': 55, 'xmax': 315, 'ymax': 472}},
											    ]   ,     )




				@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=snake_case   ,     )
											self.assertEqual(
											    nested_simplify(snake_case   ,     decimals=4 )   ,     [
											        {'score': 0.28_68, 'label': 'cat', 'box': {'xmin': 324, 'ymin': 20, 'xmax': 640, 'ymax': 373}},
											        {'score': 0.2_77, 'label': 'remote', 'box': {'xmin': 40, 'ymin': 72, 'xmax': 177, 'ymax': 115}},
											    ]   ,     )


from unittest import TestCase

from datasets import Sequence, Value
from datasets.arrow_dataset import Dataset







class 				lowercase       ( lowercase_    ):




				def 					a							(      self ):
											return [
											    {"col_1": 3, "col_2": "a"},
											    {"col_1": 2, "col_2": "b"},
											    {"col_1": 1, "col_2": "c"},
											    {"col_1": 0, "col_2": "d"},
											]




				def 					a							(      self ):
											snake_case_           =					{'col_1': [3, 2, 1, 0], 'col_2': ['a', 'b', 'c', 'd']}
											return Dataset.from_dict(snake_case )




				def 					a							(      self ):
											snake_case_           =					self._create_example_records()
											snake_case_           =					Dataset.from_list(snake_case )
											self.assertListEqual(dset.column_names   ,     ['col_1', 'col_2'] )
											for i, r in enumerate(snake_case ):
																		self.assertDictEqual(snake_case   ,     example_records[i] )




				def 					a							(      self ):
											snake_case_           =					self._create_example_records()
											snake_case_           =					Dataset.from_list(snake_case )
											snake_case_           =					Dataset.from_dict({k: [r[k] for r in example_records] for k in example_records[0]} )
											self.assertEqual(dset.info   ,     dset_from_dict.info )




				def 					a							(      self ):  # checks what happens with missing columns
											snake_case_           =					[{'col_1': 1}, {'col_2': 'x'}]
											snake_case_           =					Dataset.from_list(snake_case )
											self.assertDictEqual(dset[0]   ,     {'col_1': 1} )
											self.assertDictEqual(dset[1]   ,     {'col_1': None} )  # NB: first record is used for columns




				def 					a							(      self ):  # checks if the type can be inferred from the second record
											snake_case_           =					[{'col_1': []}, {'col_1': [1, 2]}]
											snake_case_           =					Dataset.from_list(snake_case )
											self.assertEqual(dset.info.features['col_1']   ,     Sequence(Value('int64' ) ) )




				def 					a							(      self ):
											snake_case_           =					Dataset.from_list([] )
											self.assertEqual(len(snake_case )   ,     0 )
											self.assertListEqual(dset.column_names   ,     [] )




