
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				:




					"""simple docstring"""







					@staticmethod
					def      lowerCamelCase__     (				*_snake_case						:					Any       ,   **_snake_case						:					Tuple	)      -> str:







										"""simple docstring"""
										pass



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




			"""simple docstring"""







			snake_case	      =				MODEL_FOR_ZERO_SHOT_OBJECT_DETECTION_MAPPING




			def      lowerCamelCase__     (				self						:					Dict       ,   _snake_case						:					List[str]       ,   _snake_case						:					Dict       ,   _snake_case						:					Dict	)      -> str:







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

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




			def      lowerCamelCase__     (				self						:					Tuple       ,   _snake_case						:					Optional[int]       ,   _snake_case						:					Optional[Any]	)      -> str:







								"""simple docstring"""
								A_				 =						object_detector(examples[0]       ,   threshold=0.0	)

								A_				 =						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      lowerCamelCase__     (				self						:					List[Any]	)      -> str:







								"""simple docstring"""
								pass




			@require_torch
			def      lowerCamelCase__     (				self						:					Optional[Any]	)      -> str:







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

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

								self.assertEqual(
								    nested_simplify(__UpperCamelCase       ,   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}},
								    ]       ,   )

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

								self.assertEqual(
								    nested_simplify(__UpperCamelCase       ,   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      lowerCamelCase__     (				self						:					List[Any]	)      -> Dict:







								"""simple docstring"""
								A_				 =						pipeline("zero-shot-object-detection"	)

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

								A_				 =						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.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      lowerCamelCase__     (				self						:					Any	)      -> List[Any]:







								"""simple docstring"""
								pass




			@require_torch
			@slow
			def      lowerCamelCase__     (				self						:					str	)      -> List[str]:







								"""simple docstring"""
								A_				 =						0.2
								A_				 =						pipeline("zero-shot-object-detection"	)

								A_				 =						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.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      lowerCamelCase__     (				self						:					Any	)      -> List[Any]:







								"""simple docstring"""
								A_				 =						2
								A_				 =						pipeline("zero-shot-object-detection"	)

								A_				 =						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.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"""





import os

import pytest
from attr import dataclass


UpperCamelCase_					:						str				= '''us-east-1'''  # defaults region



@dataclass
class __lowerCAmelCase				:




			"""simple docstring"""







			snake_case	      =				42
			snake_case	      =				"arn:aws:iam::558105141721:role/sagemaker_execution_role"
			snake_case	      =				{
			    "task_name": "mnli",
			    "per_device_train_batch_size": 16,
			    "per_device_eval_batch_size": 16,
			    "do_train": True,
			    "do_eval": True,
			    "do_predict": True,
			    "output_dir": "/opt/ml/model",
			    "overwrite_output_dir": True,
			    "max_steps": 5_00,
			    "save_steps": 55_00,
			}
			snake_case	      =				{**hyperparameters, "max_steps": 10_00}




			@property
			def      lowerCamelCase__     (				self						:					int	)      -> str:







								"""simple docstring"""
								if self.framework == "pytorch":
													return [
													    {"Name": "train_runtime", "Regex": r"train_runtime.*=\D*(.*?)$"},
													    {"Name": "eval_accuracy", "Regex": r"eval_accuracy.*=\D*(.*?)$"},
													    {"Name": "eval_loss", "Regex": r"eval_loss.*=\D*(.*?)$"},
													]
								else:
													return [
													    {"Name": "train_runtime", "Regex": r"train_runtime.*=\D*(.*?)$"},
													    {"Name": "eval_accuracy", "Regex": r"loss.*=\D*(.*?)]?$"},
													    {"Name": "eval_loss", "Regex": r"sparse_categorical_accuracy.*=\D*(.*?)]?$"},
													]




			@property
			def      lowerCamelCase__     (				self						:					Any	)      -> str:







								"""simple docstring"""
								return F'{self.framework}-transfromers-test'




			@property
			def      lowerCamelCase__     (				self						:					List[Any]	)      -> str:







								"""simple docstring"""
								return F'./tests/sagemaker/scripts/{self.framework}'






			@property
			def      lowerCamelCase__     (				self						:					Any	)      -> str:







								"""simple docstring"""
								if self.framework == "pytorch":
													return "763104351884.dkr.ecr.us-east-1.amazonaws.com/huggingface-pytorch-training:1.7.1-transformers4.6.1-gpu-py36-cu110-ubuntu18.04"
								else:
													return "763104351884.dkr.ecr.us-east-1.amazonaws.com/huggingface-tensorflow-training:2.4.1-transformers4.6.1-gpu-py37-cu110-ubuntu18.04"





@pytest.fixture(scope="class"				)
def 							A_     (__a				):

					'''simple docstring'''





					A_				 =						SageMakerTestEnvironment(framework=request.cls.framework				)




