


"""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    lowerCamelCase__						:
             @staticmethod
             def SCREAMING_SNAKE_CASE_	(		*A_	:	List[Any]      ,       **A_	:	Tuple							):






              '''simple docstring'''


              pass





@is_pipeline_test
@require_vision
@require_torch
class    lowerCamelCase__						(		unittest.TestCase    ):
      a :     int											=		MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING
      def SCREAMING_SNAKE_CASE_	(		self	:	List[Any]      ,       A_	:	Optional[Any]      ,       A_	:	Optional[int]      ,       A_	:	Union[str, Any]							):






       '''simple docstring'''


       __lowercase									=	pipeline(
           """zero-shot-object-detection"""      ,       model="""hf-internal-testing/tiny-random-owlvit-object-detection"""							)

       __lowercase									=	[
           {
               """image""": """./tests/fixtures/tests_samples/COCO/000000039769.png""",
               """candidate_labels""": ["""cat""", """remote""", """couch"""],
           }
       ]
       return object_detector, examples
      def SCREAMING_SNAKE_CASE_	(		self	:	int      ,       A_	:	Any      ,       A_	:	str							):






       '''simple docstring'''


       __lowercase									=	object_detector(examples[0]      ,       threshold=0.0							)

       __lowercase									=	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 SCREAMING_SNAKE_CASE_	(		self	:	int							):






       '''simple docstring'''


       pass
      @require_torch
      def SCREAMING_SNAKE_CASE_	(		self	:	Optional[int]							):






       '''simple docstring'''


       __lowercase									=	pipeline(
           """zero-shot-object-detection"""      ,       model="""hf-internal-testing/tiny-random-owlvit-object-detection"""							)

       __lowercase									=	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""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
               {"""score""": 0.72_18, """label""": """remote""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
               {"""score""": 0.71_84, """label""": """couch""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
               {"""score""": 0.67_48, """label""": """remote""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
               {"""score""": 0.66_56, """label""": """cat""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
               {"""score""": 0.66_14, """label""": """couch""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
               {"""score""": 0.64_56, """label""": """remote""", """box""": {"""xmin""": 4_9_4, """ymin""": 1_0_5, """xmax""": 5_2_1, """ymax""": 1_2_7}},
               {"""score""": 0.6_42, """label""": """remote""", """box""": {"""xmin""": 6_7, """ymin""": 2_7_4, """xmax""": 9_3, """ymax""": 2_9_7}},
               {"""score""": 0.64_19, """label""": """cat""", """box""": {"""xmin""": 4_9_4, """ymin""": 1_0_5, """xmax""": 5_2_1, """ymax""": 1_2_7}},
           ]      ,       )

       __lowercase									=	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""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
                   {"""score""": 0.72_18, """label""": """remote""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
                   {"""score""": 0.71_84, """label""": """couch""", """box""": {"""xmin""": 2_0_4, """ymin""": 1_6_7, """xmax""": 2_3_2, """ymax""": 1_9_0}},
                   {"""score""": 0.67_48, """label""": """remote""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
                   {"""score""": 0.66_56, """label""": """cat""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
                   {"""score""": 0.66_14, """label""": """couch""", """box""": {"""xmin""": 5_7_1, """ymin""": 8_3, """xmax""": 5_9_8, """ymax""": 1_0_3}},
                   {"""score""": 0.64_56, """label""": """remote""", """box""": {"""xmin""": 4_9_4, """ymin""": 1_0_5, """xmax""": 5_2_1, """ymax""": 1_2_7}},
                   {"""score""": 0.6_42, """label""": """remote""", """box""": {"""xmin""": 6_7, """ymin""": 2_7_4, """xmax""": 9_3, """ymax""": 2_9_7}},
                   {"""score""": 0.64_19, """label""": """cat""", """box""": {"""xmin""": 4_9_4, """ymin""": 1_0_5, """xmax""": 5_2_1, """ymax""": 1_2_7}},
               ]
           ]      ,       )
      @require_torch
      @slow
      def SCREAMING_SNAKE_CASE_	(		self	:	Tuple							):






       '''simple docstring'''


       __lowercase									=	pipeline("""zero-shot-object-detection"""							)

       __lowercase									=	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""": 3_2_4, """ymin""": 2_0, """xmax""": 6_4_0, """ymax""": 3_7_3}},
               {"""score""": 0.2_77, """label""": """remote""", """box""": {"""xmin""": 4_0, """ymin""": 7_2, """xmax""": 1_7_7, """ymax""": 1_1_5}},
               {"""score""": 0.25_37, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 5_5, """xmax""": 3_1_5, """ymax""": 4_7_2}},
               {"""score""": 0.14_74, """label""": """remote""", """box""": {"""xmin""": 3_3_5, """ymin""": 7_4, """xmax""": 3_7_1, """ymax""": 1_8_7}},
               {"""score""": 0.12_08, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 6_4_2, """ymax""": 4_7_6}},
           ]      ,       )

       __lowercase									=	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""": 3_2_4, """ymin""": 2_0, """xmax""": 6_4_0, """ymax""": 3_7_3}},
                   {"""score""": 0.2_77, """label""": """remote""", """box""": {"""xmin""": 4_0, """ymin""": 7_2, """xmax""": 1_7_7, """ymax""": 1_1_5}},
                   {"""score""": 0.25_37, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 5_5, """xmax""": 3_1_5, """ymax""": 4_7_2}},
                   {"""score""": 0.14_74, """label""": """remote""", """box""": {"""xmin""": 3_3_5, """ymin""": 7_4, """xmax""": 3_7_1, """ymax""": 1_8_7}},
                   {"""score""": 0.12_08, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 6_4_2, """ymax""": 4_7_6}},
               ],
               [
                   {"""score""": 0.28_68, """label""": """cat""", """box""": {"""xmin""": 3_2_4, """ymin""": 2_0, """xmax""": 6_4_0, """ymax""": 3_7_3}},
                   {"""score""": 0.2_77, """label""": """remote""", """box""": {"""xmin""": 4_0, """ymin""": 7_2, """xmax""": 1_7_7, """ymax""": 1_1_5}},
                   {"""score""": 0.25_37, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 5_5, """xmax""": 3_1_5, """ymax""": 4_7_2}},
                   {"""score""": 0.14_74, """label""": """remote""", """box""": {"""xmin""": 3_3_5, """ymin""": 7_4, """xmax""": 3_7_1, """ymax""": 1_8_7}},
                   {"""score""": 0.12_08, """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 SCREAMING_SNAKE_CASE_	(		self	:	Any							):






       '''simple docstring'''


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






       '''simple docstring'''


       __lowercase									=	0.2
       __lowercase									=	pipeline("""zero-shot-object-detection"""							)

       __lowercase									=	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""": 3_2_4, """ymin""": 2_0, """xmax""": 6_4_0, """ymax""": 3_7_3}},
               {"""score""": 0.2_77, """label""": """remote""", """box""": {"""xmin""": 4_0, """ymin""": 7_2, """xmax""": 1_7_7, """ymax""": 1_1_5}},
               {"""score""": 0.25_37, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 5_5, """xmax""": 3_1_5, """ymax""": 4_7_2}},
           ]      ,       )






      @require_torch
      @slow
      def SCREAMING_SNAKE_CASE_	(		self	:	int							):






       '''simple docstring'''


       __lowercase									=	2
       __lowercase									=	pipeline("""zero-shot-object-detection"""							)

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




"""simple docstring"""

from typing import List

from .keymap import KEYMAP, get_character


def lowerCAmelCase_      (				UpperCamelCase__	: str ):






 """simple docstring"""







 def decorator(UpperCamelCase__	: Tuple ):
  __lowercase									=	getattr(UpperCamelCase__				,   """handle_key"""				,   [] )
  handle += [key]
  setattr(UpperCamelCase__				,   """handle_key"""				,   UpperCamelCase__ )
  return func

 return decorator


def lowerCAmelCase_      (				*UpperCamelCase__	: List[str] ):






 """simple docstring"""







 def decorator(UpperCamelCase__	: Tuple ):
  __lowercase									=	getattr(UpperCamelCase__				,   """handle_key"""				,   [] )
  handle += keys
  setattr(UpperCamelCase__				,   """handle_key"""				,   UpperCamelCase__ )
  return func

 return decorator





class    lowerCamelCase__						(		_a    ):
      def __new__(		cls	:	str      ,       A_	:	Optional[Any]      ,       A_	:	Union[str, Any]      ,       A_	:	int							):






       '''simple docstring'''


       __lowercase									=	super().__new__(cls      ,       A_      ,       A_      ,       A_							)
       if not hasattr(A_      ,       """key_handler"""							):
        setattr(A_      ,       """key_handler"""      ,       {}							)
       setattr(A_      ,       """handle_input"""      ,       KeyHandler.handle_input							)

       for value in attrs.values():
        __lowercase									=	getattr(A_      ,       """handle_key"""      ,       []							)
        for key in handled_keys:
         __lowercase									=	value
       return new_cls






      @staticmethod
      def SCREAMING_SNAKE_CASE_	(		cls	:	Dict							):






       '''simple docstring'''


       __lowercase									=	get_character()
       if char != KEYMAP["undefined"]:
        __lowercase									=	ord(A_							)
       __lowercase									=	cls.key_handler.get(A_							)
       if handler:
        __lowercase									=	char
        return handler(cls							)
       else:
        return None






def lowerCAmelCase_      (				cls	: int ):






 """simple docstring"""







 return KeyHandler(cls.__name__				,   cls.__bases__				,   cls.__dict__.copy() )
