





'''simple docstring'''
import unittest

from transformers import (
    MODEL_FOR_OBJECT_DETECTION_MAPPING,
    AutoFeatureExtractor,
    AutoModelForObjectDetection,
    ObjectDetectionPipeline,
    is_vision_available,
    pipeline,
)
from transformers.testing_utils import (
    is_pipeline_test,
    nested_simplify,
    require_pytesseract,
    require_tf,
    require_timm,
    require_torch,
    require_vision,
    slow,
)

from .test_pipelines_common import ANY


if is_vision_available():
		from PIL import Image
else:
		class      lowercase			:

				"""simple docstring"""

				@staticmethod
				def 					lowerCAmelCase__       (	*UpperCamelCase_					,     **UpperCamelCase_							):

									'''simple docstring'''


									pass
@is_pipeline_test
@require_vision
@require_timm
@require_torch
class      lowercase			(							unittest.TestCase      ):

		"""simple docstring"""

		_a									=       MODEL_FOR_OBJECT_DETECTION_MAPPING




		def 					lowerCAmelCase__       (	self					,     UpperCamelCase_					,     UpperCamelCase_					,     UpperCamelCase_							):

							'''simple docstring'''


							UpperCamelCase__     :int							      =				ObjectDetectionPipeline(model=UpperCamelCase_					,     image_processor=UpperCamelCase_							)
							return object_detector, ["./tests/fixtures/tests_samples/COCO/000000039769.png"]




		def 					lowerCAmelCase__       (	self					,     UpperCamelCase_					,     UpperCamelCase_							):

							'''simple docstring'''


							UpperCamelCase__     :int							      =				object_detector('''./tests/fixtures/tests_samples/COCO/000000039769.png'''					,     threshold=0.0							)

							self.assertGreater(len(UpperCamelCase_							)					,     0							)
							for detected_object in outputs:
												self.assertEqual(
												    UpperCamelCase_					,     {
												        '''score''': ANY(UpperCamelCase_							),
												        '''label''': ANY(UpperCamelCase_							),
												        '''box''': {'''xmin''': ANY(UpperCamelCase_							), '''ymin''': ANY(UpperCamelCase_							), '''xmax''': ANY(UpperCamelCase_							), '''ymax''': ANY(UpperCamelCase_							)},
												    }					,     )

							import datasets

							UpperCamelCase__     :Any							      =				datasets.load_dataset('''hf-internal-testing/fixtures_image_utils'''					,     '''image'''					,     split='''test'''							)

							UpperCamelCase__     :str							      =				[
							    Image.open('''./tests/fixtures/tests_samples/COCO/000000039769.png'''							),
							    """http://images.cocodataset.org/val2017/000000039769.jpg""",
							    # RGBA
							    dataset[0]["""file"""],
							    # LA
							    dataset[1]["""file"""],
							    # L
							    dataset[2]["""file"""],
							]
							UpperCamelCase__     :Any							      =				object_detector(UpperCamelCase_					,     threshold=0.0							)

							self.assertEqual(len(UpperCamelCase_							)					,     len(UpperCamelCase_							)							)
							for outputs in batch_outputs:
												self.assertGreater(len(UpperCamelCase_							)					,     0							)
												for detected_object in outputs:
																	self.assertEqual(
																	    UpperCamelCase_					,     {
																	        '''score''': ANY(UpperCamelCase_							),
																	        '''label''': ANY(UpperCamelCase_							),
																	        '''box''': {'''xmin''': ANY(UpperCamelCase_							), '''ymin''': ANY(UpperCamelCase_							), '''xmax''': ANY(UpperCamelCase_							), '''ymax''': ANY(UpperCamelCase_							)},
																	    }					,     )




		@require_tf
		@unittest.skip('''Object detection not implemented in TF'''							)
		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							pass




		@require_torch
		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							UpperCamelCase__     :Tuple							      =				"""hf-internal-testing/tiny-detr-mobilenetsv3"""

							UpperCamelCase__     :Union[str, Any]							      =				AutoModelForObjectDetection.from_pretrained(UpperCamelCase_							)
							UpperCamelCase__     :Any							      =				AutoFeatureExtractor.from_pretrained(UpperCamelCase_							)
							UpperCamelCase__     :int							      =				ObjectDetectionPipeline(model=UpperCamelCase_					,     feature_extractor=UpperCamelCase_							)

							UpperCamelCase__     :int							      =				object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''					,     threshold=0.0							)

							self.assertEqual(
							    nested_simplify(UpperCamelCase_					,     decimals=4							)					,     [
							        {'''score''': 0.3376, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 159, '''ymin''': 120, '''xmax''': 480, '''ymax''': 359}},
							        {'''score''': 0.3376, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 159, '''ymin''': 120, '''xmax''': 480, '''ymax''': 359}},
							    ]					,     )

							UpperCamelCase__     :str							      =				object_detector(
							    [
							        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
							        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
							    ]					,     threshold=0.0					,     )

							self.assertEqual(
							    nested_simplify(UpperCamelCase_					,     decimals=4							)					,     [
							        [
							            {'''score''': 0.3376, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 159, '''ymin''': 120, '''xmax''': 480, '''ymax''': 359}},
							            {'''score''': 0.3376, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 159, '''ymin''': 120, '''xmax''': 480, '''ymax''': 359}},
							        ],
							        [
							            {'''score''': 0.3376, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 159, '''ymin''': 120, '''xmax''': 480, '''ymax''': 359}},
							            {'''score''': 0.3376, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 159, '''ymin''': 120, '''xmax''': 480, '''ymax''': 359}},
							        ],
							    ]					,     )




		@require_torch
		@slow
		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							UpperCamelCase__     :Union[str, Any]							      =				"""facebook/detr-resnet-50"""

							UpperCamelCase__     :Dict							      =				AutoModelForObjectDetection.from_pretrained(UpperCamelCase_							)
							UpperCamelCase__     :Any							      =				AutoFeatureExtractor.from_pretrained(UpperCamelCase_							)
							UpperCamelCase__     :Tuple							      =				ObjectDetectionPipeline(model=UpperCamelCase_					,     feature_extractor=UpperCamelCase_							)

							UpperCamelCase__     :Optional[Any]							      =				object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''							)
							self.assertEqual(
							    nested_simplify(UpperCamelCase_					,     decimals=4							)					,     [
							        {'''score''': 0.9982, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 175, '''ymax''': 117}},
							        {'''score''': 0.9960, '''label''': '''remote''', '''box''': {'''xmin''': 333, '''ymin''': 72, '''xmax''': 368, '''ymax''': 187}},
							        {'''score''': 0.9955, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 639, '''ymax''': 473}},
							        {'''score''': 0.9988, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 314, '''ymax''': 470}},
							        {'''score''': 0.9987, '''label''': '''cat''', '''box''': {'''xmin''': 345, '''ymin''': 23, '''xmax''': 640, '''ymax''': 368}},
							    ]					,     )

							UpperCamelCase__     :str							      =				object_detector(
							    [
							        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
							        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
							    ]							)
							self.assertEqual(
							    nested_simplify(UpperCamelCase_					,     decimals=4							)					,     [
							        [
							            {'''score''': 0.9982, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 175, '''ymax''': 117}},
							            {'''score''': 0.9960, '''label''': '''remote''', '''box''': {'''xmin''': 333, '''ymin''': 72, '''xmax''': 368, '''ymax''': 187}},
							            {'''score''': 0.9955, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 639, '''ymax''': 473}},
							            {'''score''': 0.9988, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 314, '''ymax''': 470}},
							            {'''score''': 0.9987, '''label''': '''cat''', '''box''': {'''xmin''': 345, '''ymin''': 23, '''xmax''': 640, '''ymax''': 368}},
							        ],
							        [
							            {'''score''': 0.9982, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 175, '''ymax''': 117}},
							            {'''score''': 0.9960, '''label''': '''remote''', '''box''': {'''xmin''': 333, '''ymin''': 72, '''xmax''': 368, '''ymax''': 187}},
							            {'''score''': 0.9955, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 639, '''ymax''': 473}},
							            {'''score''': 0.9988, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 314, '''ymax''': 470}},
							            {'''score''': 0.9987, '''label''': '''cat''', '''box''': {'''xmin''': 345, '''ymin''': 23, '''xmax''': 640, '''ymax''': 368}},
							        ],
							    ]					,     )




		@require_torch
		@slow
		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							UpperCamelCase__     :Any							      =				"""facebook/detr-resnet-50"""

							UpperCamelCase__     :int							      =				pipeline('''object-detection'''					,     model=UpperCamelCase_							)

							UpperCamelCase__     :Optional[int]							      =				object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''							)
							self.assertEqual(
							    nested_simplify(UpperCamelCase_					,     decimals=4							)					,     [
							        {'''score''': 0.9982, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 175, '''ymax''': 117}},
							        {'''score''': 0.9960, '''label''': '''remote''', '''box''': {'''xmin''': 333, '''ymin''': 72, '''xmax''': 368, '''ymax''': 187}},
							        {'''score''': 0.9955, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 639, '''ymax''': 473}},
							        {'''score''': 0.9988, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 314, '''ymax''': 470}},
							        {'''score''': 0.9987, '''label''': '''cat''', '''box''': {'''xmin''': 345, '''ymin''': 23, '''xmax''': 640, '''ymax''': 368}},
							    ]					,     )

							UpperCamelCase__     :Any							      =				object_detector(
							    [
							        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
							        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
							    ]							)
							self.assertEqual(
							    nested_simplify(UpperCamelCase_					,     decimals=4							)					,     [
							        [
							            {'''score''': 0.9982, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 175, '''ymax''': 117}},
							            {'''score''': 0.9960, '''label''': '''remote''', '''box''': {'''xmin''': 333, '''ymin''': 72, '''xmax''': 368, '''ymax''': 187}},
							            {'''score''': 0.9955, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 639, '''ymax''': 473}},
							            {'''score''': 0.9988, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 314, '''ymax''': 470}},
							            {'''score''': 0.9987, '''label''': '''cat''', '''box''': {'''xmin''': 345, '''ymin''': 23, '''xmax''': 640, '''ymax''': 368}},
							        ],
							        [
							            {'''score''': 0.9982, '''label''': '''remote''', '''box''': {'''xmin''': 40, '''ymin''': 70, '''xmax''': 175, '''ymax''': 117}},
							            {'''score''': 0.9960, '''label''': '''remote''', '''box''': {'''xmin''': 333, '''ymin''': 72, '''xmax''': 368, '''ymax''': 187}},
							            {'''score''': 0.9955, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 639, '''ymax''': 473}},
							            {'''score''': 0.9988, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 314, '''ymax''': 470}},
							            {'''score''': 0.9987, '''label''': '''cat''', '''box''': {'''xmin''': 345, '''ymin''': 23, '''xmax''': 640, '''ymax''': 368}},
							        ],
							    ]					,     )




		@require_torch
		@slow
		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							UpperCamelCase__     :List[Any]							      =				0.9985
							UpperCamelCase__     :Tuple							      =				"""facebook/detr-resnet-50"""

							UpperCamelCase__     :str							      =				pipeline('''object-detection'''					,     model=UpperCamelCase_							)

							UpperCamelCase__     :Optional[int]							      =				object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''					,     threshold=UpperCamelCase_							)
							self.assertEqual(
							    nested_simplify(UpperCamelCase_					,     decimals=4							)					,     [
							        {'''score''': 0.9988, '''label''': '''cat''', '''box''': {'''xmin''': 13, '''ymin''': 52, '''xmax''': 314, '''ymax''': 470}},
							        {'''score''': 0.9987, '''label''': '''cat''', '''box''': {'''xmin''': 345, '''ymin''': 23, '''xmax''': 640, '''ymax''': 368}},
							    ]					,     )




		@require_torch
		@require_pytesseract
		@slow
		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							UpperCamelCase__     :Union[str, Any]							      =				"""Narsil/layoutlmv3-finetuned-funsd"""
							UpperCamelCase__     :Union[str, Any]							      =				0.9993

							UpperCamelCase__     :Any							      =				pipeline('''object-detection'''					,     model=UpperCamelCase_					,     threshold=UpperCamelCase_							)

							UpperCamelCase__     :Optional[int]							      =				object_detector(
							    '''https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png'''							)
							self.assertEqual(
							    nested_simplify(UpperCamelCase_					,     decimals=4							)					,     [
							        {'''score''': 0.9993, '''label''': '''I-ANSWER''', '''box''': {'''xmin''': 294, '''ymin''': 254, '''xmax''': 343, '''ymax''': 264}},
							        {'''score''': 0.9993, '''label''': '''I-ANSWER''', '''box''': {'''xmin''': 294, '''ymin''': 254, '''xmax''': 343, '''ymax''': 264}},
							    ]					,     )



'''simple docstring'''
class      lowercase			:

		"""simple docstring"""

		def __init__(	self					,     UpperCamelCase_							):

							'''simple docstring'''


							UpperCamelCase__     :Union[str, Any]							      =				n
							UpperCamelCase__     :Tuple							      =				[None] * self.n
							UpperCamelCase__     :str							      =				0  # index of the first element
							UpperCamelCase__     :List[Any]							      =				0
							UpperCamelCase__     :Dict							      =				0




		def __len__(	self							):

							'''simple docstring'''


							return self.size




		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							return self.size == 0




		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							return False if self.is_empty() else self.array[self.front]




		def 					lowerCAmelCase__       (	self					,     UpperCamelCase_							):

							'''simple docstring'''


							if self.size >= self.n:
												raise Exception('''QUEUE IS FULL'''							)

							UpperCamelCase__     :List[Any]							      =				data
							UpperCamelCase__     :List[Any]							      =				(self.rear + 1) % self.n
							self.size += 1
							return self




		def 					lowerCAmelCase__       (	self							):

							'''simple docstring'''


							if self.size == 0:
												raise Exception('''UNDERFLOW'''							)

							UpperCamelCase__     :Dict							      =				self.array[self.front]
							UpperCamelCase__     :Union[str, Any]							      =				None
							UpperCamelCase__     :Union[str, Any]							      =				(self.front + 1) % self.n
							self.size -= 1
							return temp