






"""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 							_UpperCamelCase				(					*A      ,**A   ):
            pass







@is_pipeline_test
@require_vision
@require_torch
class    lowerCamelCase__   (			unittest.TestCase					):
    SCREAMING_SNAKE_CASE						=     MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING






    def 							_UpperCamelCase				(					self      ,A      ,A      ,A   ):
          UpperCAmelCase							     =			pipeline(
              """zero-shot-object-detection"""      ,model="""hf-internal-testing/tiny-random-owlvit-object-detection"""   )

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






    def 							_UpperCamelCase				(					self      ,A      ,A   ):
          UpperCAmelCase							     =			object_detector(examples[0]      ,threshold=0.0   )

          UpperCAmelCase							     =			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   ):
          pass






    @require_torch
    def 							_UpperCamelCase				(					self   ):
          UpperCAmelCase							     =			pipeline(
              """zero-shot-object-detection"""      ,model="""hf-internal-testing/tiny-random-owlvit-object-detection"""   )

          UpperCAmelCase							     =			object_detector(
              """./tests/fixtures/tests_samples/COCO/000000039769.png"""      ,candidate_labels=["""cat""", """remote""", """couch"""]      ,threshold=0.64      ,)

          self.assertEqual(
              nested_simplify(__UpperCamelCase      ,decimals=4   )      ,[
                  {"""score""": 0.7235, """label""": """cat""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
                  {"""score""": 0.7218, """label""": """remote""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
                  {"""score""": 0.7184, """label""": """couch""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
                  {"""score""": 0.6748, """label""": """remote""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
                  {"""score""": 0.6656, """label""": """cat""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
                  {"""score""": 0.6614, """label""": """couch""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
                  {"""score""": 0.6456, """label""": """remote""", """box""": {"""xmin""": 494, """ymin""": 105, """xmax""": 521, """ymax""": 127}},
                  {"""score""": 0.642, """label""": """remote""", """box""": {"""xmin""": 67, """ymin""": 274, """xmax""": 93, """ymax""": 297}},
                  {"""score""": 0.6419, """label""": """cat""", """box""": {"""xmin""": 494, """ymin""": 105, """xmax""": 521, """ymax""": 127}},
              ]      ,)

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

          self.assertEqual(
              nested_simplify(__UpperCamelCase      ,decimals=4   )      ,[
                  [
                      {"""score""": 0.7235, """label""": """cat""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
                      {"""score""": 0.7218, """label""": """remote""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
                      {"""score""": 0.7184, """label""": """couch""", """box""": {"""xmin""": 204, """ymin""": 167, """xmax""": 232, """ymax""": 190}},
                      {"""score""": 0.6748, """label""": """remote""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
                      {"""score""": 0.6656, """label""": """cat""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
                      {"""score""": 0.6614, """label""": """couch""", """box""": {"""xmin""": 571, """ymin""": 83, """xmax""": 598, """ymax""": 103}},
                      {"""score""": 0.6456, """label""": """remote""", """box""": {"""xmin""": 494, """ymin""": 105, """xmax""": 521, """ymax""": 127}},
                      {"""score""": 0.642, """label""": """remote""", """box""": {"""xmin""": 67, """ymin""": 274, """xmax""": 93, """ymax""": 297}},
                      {"""score""": 0.6419, """label""": """cat""", """box""": {"""xmin""": 494, """ymin""": 105, """xmax""": 521, """ymax""": 127}},
                  ]
              ]      ,)






    @require_torch
    @slow
    def 							_UpperCamelCase				(					self   ):
          UpperCAmelCase							     =			pipeline("""zero-shot-object-detection"""   )

          UpperCAmelCase							     =			object_detector(
              """http://images.cocodataset.org/val2017/000000039769.jpg"""      ,candidate_labels=["""cat""", """remote""", """couch"""]      ,)
          self.assertEqual(
              nested_simplify(__UpperCamelCase      ,decimals=4   )      ,[
                  {"""score""": 0.2868, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
                  {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
                  {"""score""": 0.2537, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 55, """xmax""": 315, """ymax""": 472}},
                  {"""score""": 0.1474, """label""": """remote""", """box""": {"""xmin""": 335, """ymin""": 74, """xmax""": 371, """ymax""": 187}},
                  {"""score""": 0.1208, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 642, """ymax""": 476}},
              ]      ,)

          UpperCAmelCase							     =			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.2868, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
                      {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
                      {"""score""": 0.2537, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 55, """xmax""": 315, """ymax""": 472}},
                      {"""score""": 0.1474, """label""": """remote""", """box""": {"""xmin""": 335, """ymin""": 74, """xmax""": 371, """ymax""": 187}},
                      {"""score""": 0.1208, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 642, """ymax""": 476}},
                  ],
                  [
                      {"""score""": 0.2868, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
                      {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
                      {"""score""": 0.2537, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 55, """xmax""": 315, """ymax""": 472}},
                      {"""score""": 0.1474, """label""": """remote""", """box""": {"""xmin""": 335, """ymin""": 74, """xmax""": 371, """ymax""": 187}},
                      {"""score""": 0.1208, """label""": """couch""", """box""": {"""xmin""": 4, """ymin""": 0, """xmax""": 642, """ymax""": 476}},
                  ],
              ]      ,)






    @require_tf
    @unittest.skip("""Zero Shot Object Detection not implemented in TF"""   )
    def 							_UpperCamelCase				(					self   ):
          pass






    @require_torch
    @slow
    def 							_UpperCamelCase				(					self   ):
          UpperCAmelCase							     =			0.2
          UpperCAmelCase							     =			pipeline("""zero-shot-object-detection"""   )

          UpperCAmelCase							     =			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.2868, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
                  {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
                  {"""score""": 0.2537, """label""": """cat""", """box""": {"""xmin""": 1, """ymin""": 55, """xmax""": 315, """ymax""": 472}},
              ]      ,)






    @require_torch
    @slow
    def 							_UpperCamelCase				(					self   ):
          UpperCAmelCase							     =			2
          UpperCAmelCase							     =			pipeline("""zero-shot-object-detection"""   )

          UpperCAmelCase							     =			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.2868, """label""": """cat""", """box""": {"""xmin""": 324, """ymin""": 20, """xmax""": 640, """ymax""": 373}},
                  {"""score""": 0.277, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 72, """xmax""": 177, """ymax""": 115}},
              ]      ,)






from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ...utils.backbone_utils import BackboneConfigMixin, get_aligned_output_features_output_indices


A									=  logging.get_logger(__name__)

A									=  {
    'google/bit-50': 'https://huggingface.co/google/bit-50/resolve/main/config.json',
}


class SCREAMING_SNAKE_CASE	(		__snake_case				,    __snake_case				):






			"""simple docstring"""




			__A    	=	"""bit"""
			__A    	=	["""preactivation""", """bottleneck"""]
			__A    	=	["""SAME""", """VALID"""]


			def __init__(     self			,					__UpperCamelCase=3			,					__UpperCamelCase=64			,					__UpperCamelCase=[2_56, 5_12, 10_24, 20_48]			,					__UpperCamelCase=[3, 4, 6, 3]			,					__UpperCamelCase="preactivation"			,					__UpperCamelCase="relu"			,					__UpperCamelCase=None			,					__UpperCamelCase=32			,					__UpperCamelCase=0.0			,					__UpperCamelCase=False			,					__UpperCamelCase=32			,					__UpperCamelCase=1			,					__UpperCamelCase=None			,					__UpperCamelCase=None			,					**__UpperCamelCase			,					):

				"""simple docstring"""


				super().__init__(**__UpperCamelCase				)
				if layer_type not in self.layer_types:
					raise ValueError(f"""layer_type={layer_type} is not one of {','.join(self.layer_types				)}"""				)
				if global_padding is not None:
					if global_padding.upper() in self.supported_padding:
						snake_case_   		=			global_padding.upper()
					else:
						raise ValueError(f"""Padding strategy {global_padding} not supported"""				)
				snake_case_   		=			num_channels
				snake_case_   		=			embedding_size
				snake_case_   		=			hidden_sizes
				snake_case_   		=			depths
				snake_case_   		=			layer_type
				snake_case_   		=			hidden_act
				snake_case_   		=			global_padding
				snake_case_   		=			num_groups
				snake_case_   		=			drop_path_rate
				snake_case_   		=			embedding_dynamic_padding
				snake_case_   		=			output_stride
				snake_case_   		=			width_factor

				snake_case_   		=			['stem'] + [f"""stage{idx}""" for idx in range(1			,					len(__UpperCamelCase				) + 1				)]
				snake_case_		,							snake_case_   		=			get_aligned_output_features_output_indices(
				    out_features=__UpperCamelCase			,					out_indices=__UpperCamelCase			,					stage_names=self.stage_names				)
