'''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_  (							*snake_case_   ,    **snake_case_					):

        '''simple docstring'''







        pass




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



  """simple docstring"""
  __lowerCAmelCase				      =					MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING







  def    lowercase_  (							self   ,    snake_case_   ,    snake_case_   ,    snake_case_					):

    '''simple docstring'''







    __UpperCAmelCase:					List[Any]		= pipeline(
        """zero-shot-object-detection"""   ,    model="""hf-internal-testing/tiny-random-owlvit-object-detection"""					)

    __UpperCAmelCase:					Union[str, Any]		= [
        {
            """image""": """./tests/fixtures/tests_samples/COCO/000000039769.png""",
            """candidate_labels""": ["""cat""", """remote""", """couch"""],
        }
    ]
    return object_detector, examples







  def    lowercase_  (							self   ,    snake_case_   ,    snake_case_					):

    '''simple docstring'''







    __UpperCAmelCase:					Any		= object_detector(examples[0]   ,    threshold=0.0					)

    __UpperCAmelCase:					Dict		= 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    lowercase_  (							self					):

    '''simple docstring'''







    pass







  @require_torch
  def    lowercase_  (							self					):

    '''simple docstring'''







    __UpperCAmelCase:					List[Any]		= pipeline(
        """zero-shot-object-detection"""   ,    model="""hf-internal-testing/tiny-random-owlvit-object-detection"""					)

    __UpperCAmelCase:					Any		= object_detector(
        """./tests/fixtures/tests_samples/COCO/000000039769.png"""   ,    candidate_labels=["""cat""", """remote""", """couch"""]   ,    threshold=0.6_4   ,    )

    self.assertEqual(
        nested_simplify(snake_case_   ,    decimals=4					)   ,    [
            {"""score""": 0.7_2_3_5, """label""": """cat""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
            {"""score""": 0.7_2_1_8, """label""": """remote""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
            {"""score""": 0.7_1_8_4, """label""": """couch""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
            {"""score""": 0.6_7_4_8, """label""": """remote""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
            {"""score""": 0.6_6_5_6, """label""": """cat""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
            {"""score""": 0.6_6_1_4, """label""": """couch""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
            {"""score""": 0.6_4_5_6, """label""": """remote""", """box""": {"""xmin""": 494, """ymin""": 105, """xmax""": 521, """ymax""": 127}},
            {"""score""": 0.6_4_2, """label""": """remote""", """box""": {"""xmin""": 67, """ymin""": 274, """xmax""": 93, """ymax""": 297}},
            {"""score""": 0.6_4_1_9, """label""": """cat""", """box""": {"""xmin""": 494, """ymin""": 105, """xmax""": 521, """ymax""": 127}},
        ]   ,    )

    __UpperCAmelCase:					Dict		= object_detector(
        [
            {
                """image""": """./tests/fixtures/tests_samples/COCO/000000039769.png""",
                """candidate_labels""": ["""cat""", """remote""", """couch"""],
            }
        ]   ,    threshold=0.6_4   ,    )

    self.assertEqual(
        nested_simplify(snake_case_   ,    decimals=4					)   ,    [
            [
                {"""score""": 0.7_2_3_5, """label""": """cat""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
                {"""score""": 0.7_2_1_8, """label""": """remote""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
                {"""score""": 0.7_1_8_4, """label""": """couch""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
                {"""score""": 0.6_7_4_8, """label""": """remote""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
                {"""score""": 0.6_6_5_6, """label""": """cat""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
                {"""score""": 0.6_6_1_4, """label""": """couch""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
                {"""score""": 0.6_4_5_6, """label""": """remote""", """box""": {"""xmin""": 494, """ymin""": 105, """xmax""": 521, """ymax""": 127}},
                {"""score""": 0.6_4_2, """label""": """remote""", """box""": {"""xmin""": 67, """ymin""": 274, """xmax""": 93, """ymax""": 297}},
                {"""score""": 0.6_4_1_9, """label""": """cat""", """box""": {"""xmin""": 494, """ymin""": 105, """xmax""": 521, """ymax""": 127}},
            ]
        ]   ,    )







  @require_torch
  @slow
  def    lowercase_  (							self					):

    '''simple docstring'''







    __UpperCAmelCase:					List[Any]		= pipeline("""zero-shot-object-detection"""					)

    __UpperCAmelCase:					Any		= object_detector(
        """http://images.cocodataset.org/val2017/000000039769.jpg"""   ,    candidate_labels=["""cat""", """remote""", """couch"""]   ,    )
    self.assertEqual(
        nested_simplify(snake_case_   ,    decimals=4					)   ,    [
            {"""score""": 0.2_8_6_8, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
            {"""score""": 0.2_7_7, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
            {"""score""": 0.2_5_3_7, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 55, """xmax""": 315, """ymax""": 472}},
            {"""score""": 0.1_4_7_4, """label""": """remote""", """box""": {"""xmin""": 335, """ymin""": 74, """xmax""": 371, """ymax""": 187}},
            {"""score""": 0.1_2_0_8, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 642, """ymax""": 476}},
        ]   ,    )

    __UpperCAmelCase:					int		= 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.2_8_6_8, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
                {"""score""": 0.2_7_7, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
                {"""score""": 0.2_5_3_7, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 55, """xmax""": 315, """ymax""": 472}},
                {"""score""": 0.1_4_7_4, """label""": """remote""", """box""": {"""xmin""": 335, """ymin""": 74, """xmax""": 371, """ymax""": 187}},
                {"""score""": 0.1_2_0_8, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 642, """ymax""": 476}},
            ],
            [
                {"""score""": 0.2_8_6_8, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
                {"""score""": 0.2_7_7, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
                {"""score""": 0.2_5_3_7, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 55, """xmax""": 315, """ymax""": 472}},
                {"""score""": 0.1_4_7_4, """label""": """remote""", """box""": {"""xmin""": 335, """ymin""": 74, """xmax""": 371, """ymax""": 187}},
                {"""score""": 0.1_2_0_8, """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					):

    '''simple docstring'''







    pass







  @require_torch
  @slow
  def    lowercase_  (							self					):

    '''simple docstring'''







    __UpperCAmelCase:					Tuple		= 0.2
    __UpperCAmelCase:					Optional[int]		= pipeline("""zero-shot-object-detection"""					)

    __UpperCAmelCase:					List[str]		= 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.2_8_6_8, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
            {"""score""": 0.2_7_7, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
            {"""score""": 0.2_5_3_7, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 55, """xmax""": 315, """ymax""": 472}},
        ]   ,    )







  @require_torch
  @slow
  def    lowercase_  (							self					):

    '''simple docstring'''







    __UpperCAmelCase:					Optional[int]		= 2
    __UpperCAmelCase:					Dict		= pipeline("""zero-shot-object-detection"""					)

    __UpperCAmelCase:					Union[str, Any]		= 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.2_8_6_8, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
            {"""score""": 0.2_7_7, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
        ]   ,    )
'''simple docstring'''






def  UpperCamelCase__					(					_lowercase    :				int     )							->	int:

  if not isinstance(_lowercase   ,    _lowercase     ):
    __UpperCAmelCase:					List[str]		= F'''Input value of [number={number}] must be an integer'''
    raise TypeError(_lowercase     )

  if number < 1:
    __UpperCAmelCase:					Dict		= F'''Input value of [number={number}] must be > 0'''
    raise ValueError(_lowercase     )

  __UpperCAmelCase:					int		= 1

  for i in range(1   ,    _lowercase     ):
    current_number *= 4 * i - 2
    current_number //= i + 1

  return current_number


if __name__ == "__main__":
    import doctest

    doctest.testmod()