






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 				UpperCAmelCase_  :




           @staticmethod
           def   __UpperCAmelCase  (				*_lowerCAmelCase	,						**_lowerCAmelCase		):
                pass







@is_pipeline_test
@require_vision
@require_torch
class 				UpperCAmelCase_  (		unittest.TestCase		):
     __lowerCamelCase      				=  MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING




     def   __UpperCAmelCase  (				self	,						_lowerCAmelCase	,						_lowerCAmelCase	,						_lowerCAmelCase		):
          UpperCAmelCase__      :  Dict				      =			pipeline(
              """zero-shot-object-detection"""	,						model="""hf-internal-testing/tiny-random-owlvit-object-detection"""		)

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




     def   __UpperCAmelCase  (				self	,						_lowerCAmelCase	,						_lowerCAmelCase		):
          UpperCAmelCase__      :  Tuple				      =			object_detector(examples[0]	,						threshold=0.0		)

          UpperCAmelCase__      :  List[str]				      =			len(_lowerCAmelCase		)
          self.assertGreater(_lowerCAmelCase	,						0		)
          self.assertEqual(
              _lowerCAmelCase	,						[
                  {
                      """score""": ANY(_lowerCAmelCase		),
                      """label""": ANY(_lowerCAmelCase		),
                      """box""": {"""xmin""": ANY(_lowerCAmelCase		), """ymin""": ANY(_lowerCAmelCase		), """xmax""": ANY(_lowerCAmelCase		), """ymax""": ANY(_lowerCAmelCase		)},
                  }
                  for i in range(_lowerCAmelCase		)
              ]	,						)




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




     @require_torch
     def   __UpperCAmelCase  (				self		):
          UpperCAmelCase__      :  List[str]				      =			pipeline(
              """zero-shot-object-detection"""	,						model="""hf-internal-testing/tiny-random-owlvit-object-detection"""		)

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

          self.assertEqual(
              nested_simplify(_lowerCAmelCase	,						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__      :  int				      =			object_detector(
              [
                  {
                      """image""": """./tests/fixtures/tests_samples/COCO/000000039769.png""",
                      """candidate_labels""": ["""cat""", """remote""", """couch"""],
                  }
              ]	,						threshold=0.6_4	,						)

          self.assertEqual(
              nested_simplify(_lowerCAmelCase	,						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   __UpperCAmelCase  (				self		):
          UpperCAmelCase__      :  Optional[Any]				      =			pipeline("""zero-shot-object-detection"""		)

          UpperCAmelCase__      :  Optional[Any]				      =			object_detector(
              """http://images.cocodataset.org/val2017/000000039769.jpg"""	,						candidate_labels=["""cat""", """remote""", """couch"""]	,						)
          self.assertEqual(
              nested_simplify(_lowerCAmelCase	,						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__      :  Union[str, Any]				      =			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(_lowerCAmelCase	,						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   __UpperCAmelCase  (				self		):
          pass




     @require_torch
     @slow
     def   __UpperCAmelCase  (				self		):
          UpperCAmelCase__      :  List[Any]				      =			0.2
          UpperCAmelCase__      :  List[Any]				      =			pipeline("""zero-shot-object-detection"""		)

          UpperCAmelCase__      :  Tuple				      =			object_detector(
              """http://images.cocodataset.org/val2017/000000039769.jpg"""	,						candidate_labels=["""cat""", """remote""", """couch"""]	,						threshold=_lowerCAmelCase	,						)
          self.assertEqual(
              nested_simplify(_lowerCAmelCase	,						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   __UpperCAmelCase  (				self		):
          UpperCAmelCase__      :  Optional[Any]				      =			2
          UpperCAmelCase__      :  int				      =			pipeline("""zero-shot-object-detection"""		)

          UpperCAmelCase__      :  Any				      =			object_detector(
              """http://images.cocodataset.org/val2017/000000039769.jpg"""	,						candidate_labels=["""cat""", """remote""", """couch"""]	,						top_k=_lowerCAmelCase	,						)
          self.assertEqual(
              nested_simplify(_lowerCAmelCase	,						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}},
              ]	,						)









# Copyright 2023 The HuggingFace Team. All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from typing import TYPE_CHECKING

# rely on isort to merge the imports
from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tokenizers_available, is_torch_available


A									=  {'configuration_mra': ['MRA_PRETRAINED_CONFIG_ARCHIVE_MAP', 'MraConfig']}

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		A									=  [
		    'MRA_PRETRAINED_MODEL_ARCHIVE_LIST',
		    'MraForMaskedLM',
		    'MraForMultipleChoice',
		    'MraForQuestionAnswering',
		    'MraForSequenceClassification',
		    'MraForTokenClassification',
		    'MraLayer',
		    'MraModel',
		    'MraPreTrainedModel',
		]


if TYPE_CHECKING:
		from .configuration_mra import MRA_PRETRAINED_CONFIG_ARCHIVE_MAP, MraConfig

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_mra import (
				    MRA_PRETRAINED_MODEL_ARCHIVE_LIST,
				    MraForMaskedLM,
				    MraForMultipleChoice,
				    MraForQuestionAnswering,
				    MraForSequenceClassification,
				    MraForTokenClassification,
				    MraLayer,
				    MraModel,
				    MraPreTrainedModel,
				)
else:
		import sys

		A									=  _LazyModule(__name__, globals()['__file__'], _import_structure)
