"""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      _A	:




           """simple docstring"""




           @staticmethod
           def  lowercase					(		*A_							:     List[Any]	,      **A_							:     List[Any]    )    ->       Optional[int]:
                pass



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




    """simple docstring"""




    UpperCamelCase_	:					List[str]							=					MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING
    def  lowercase					(		self							:     Optional[int]	,      A_							:     Tuple	,      A_							:     Tuple	,      A_							:     Optional[int]    )    ->       Any:
         __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  lowercase					(		self							:     Dict	,      A_							:     str	,      A_							:     Dict    )    ->       Dict:
         __snake_case				=							object_detector(examples[0]	,      threshold=0.0    )

         __snake_case				=							len(A_    )
         self.assertGreater(A_	,      0    )
         self.assertEqual(
             A_	,      [
                 {
                     '''score''': ANY(A_    ),
                     '''label''': ANY(A_    ),
                     '''box''': {'''xmin''': ANY(A_    ), '''ymin''': ANY(A_    ), '''xmax''': ANY(A_    ), '''ymax''': ANY(A_    )},
                 }
                 for i in range(A_    )
             ]	,      )
    @require_tf
    @unittest.skip('''Zero Shot Object Detection not implemented in TF'''    )
    def  lowercase					(		self							:     Dict    )    ->       Any:
         pass
    @require_torch
    def  lowercase					(		self							:     Optional[Any]    )    ->       int:
         __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(A_	,      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(A_	,      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  lowercase					(		self							:     Union[str, Any]    )    ->       Dict:
         __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(A_	,      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(A_	,      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  lowercase					(		self							:     Optional[int]    )    ->       Optional[int]:
         pass
    @require_torch
    @slow
    def  lowercase					(		self							:     List[Any]    )    ->       List[Any]:
         __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=A_	,      )
         self.assertEqual(
             nested_simplify(A_	,      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  lowercase					(		self							:     List[Any]    )    ->       Optional[Any]:
         __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=A_	,      )
         self.assertEqual(
             nested_simplify(A_	,      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}},
             ]	,      )
"""simple docstring"""



from dataclasses import dataclass, field
from typing import ClassVar, Dict

from ..features import Features, Value
from .base import TaskTemplate



@dataclass(frozen=_UpperCAmelCase					)
class      _A	(						_UpperCAmelCase					):




    """simple docstring"""




    UpperCamelCase_	:					str							=					field(default='''summarization'''							, metadata={'''include_in_asdict_even_if_is_default''': True}					)
    UpperCamelCase_	:					ClassVar[Features]							=					Features({'''text''': Value('''string'''					)}					)
    UpperCamelCase_	:					ClassVar[Features]							=					Features({'''summary''': Value('''string'''					)}					)
    UpperCamelCase_	:					str							=					"text"
    UpperCamelCase_	:					str							=					"summary"
    @property
    def  lowercase					(		self							:     List[Any]    )    ->       Dict[str, str]:
         return {self.text_column: "text", self.summary_column: "summary"}