


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 					__A   ( *A		,      **A	)  -> Optional[Any]:







							'''simple docstring'''







							pass







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



		"""simple docstring"""

		UpperCamelCase     :					Any			       =		MODEL_FOR_OBJECT_DETECTION_MAPPING







		def 					__A   ( self		,      A		,      A		,      A	)  -> Optional[Any]:







					'''simple docstring'''







					lowerCamelCase    		=  ObjectDetectionPipeline(model=A		,      image_processor=A	)
					return object_detector, ["./tests/fixtures/tests_samples/COCO/000000039769.png"]







		def 					__A   ( self		,      A		,      A	)  -> List[str]:







					'''simple docstring'''







					lowerCamelCase    		=  object_detector("""./tests/fixtures/tests_samples/COCO/000000039769.png"""		,      threshold=0.0	)

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

					import datasets

					lowerCamelCase    		=  datasets.load_dataset("""hf-internal-testing/fixtures_image_utils"""		,      """image"""		,      split="""test"""	)

					lowerCamelCase    		=  [
					    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"""],
					]
					lowerCamelCase    		=  object_detector(A		,      threshold=0.0	)

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







		@require_tf
		@unittest.skip("""Object detection not implemented in TF"""	)
		def 					__A   ( self	)  -> Optional[Any]:







					'''simple docstring'''







					pass







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







					'''simple docstring'''







					lowerCamelCase    		=  """hf-internal-testing/tiny-detr-mobilenetsv3"""

					lowerCamelCase    		=  AutoModelForObjectDetection.from_pretrained(A	)
					lowerCamelCase    		=  AutoFeatureExtractor.from_pretrained(A	)
					lowerCamelCase    		=  ObjectDetectionPipeline(model=A		,      feature_extractor=A	)

					lowerCamelCase    		=  object_detector("""http://images.cocodataset.org/val2017/000000039769.jpg"""		,      threshold=0.0	)

					self.assertEqual(
					    nested_simplify(A		,      decimals=4	)		,      [
					        {"""score""": 0.3376, """label""": """LABEL_0""", """box""": {"""xmin""": 1_59, """ymin""": 1_20, """xmax""": 4_80, """ymax""": 3_59}},
					        {"""score""": 0.3376, """label""": """LABEL_0""", """box""": {"""xmin""": 1_59, """ymin""": 1_20, """xmax""": 4_80, """ymax""": 3_59}},
					    ]		,      )

					lowerCamelCase    		=  object_detector(
					    [
					        """http://images.cocodataset.org/val2017/000000039769.jpg""",
					        """http://images.cocodataset.org/val2017/000000039769.jpg""",
					    ]		,      threshold=0.0		,      )

					self.assertEqual(
					    nested_simplify(A		,      decimals=4	)		,      [
					        [
					            {"""score""": 0.3376, """label""": """LABEL_0""", """box""": {"""xmin""": 1_59, """ymin""": 1_20, """xmax""": 4_80, """ymax""": 3_59}},
					            {"""score""": 0.3376, """label""": """LABEL_0""", """box""": {"""xmin""": 1_59, """ymin""": 1_20, """xmax""": 4_80, """ymax""": 3_59}},
					        ],
					        [
					            {"""score""": 0.3376, """label""": """LABEL_0""", """box""": {"""xmin""": 1_59, """ymin""": 1_20, """xmax""": 4_80, """ymax""": 3_59}},
					            {"""score""": 0.3376, """label""": """LABEL_0""", """box""": {"""xmin""": 1_59, """ymin""": 1_20, """xmax""": 4_80, """ymax""": 3_59}},
					        ],
					    ]		,      )







		@require_torch
		@slow
		def 					__A   ( self	)  -> Dict:







					'''simple docstring'''







					lowerCamelCase    		=  """facebook/detr-resnet-50"""

					lowerCamelCase    		=  AutoModelForObjectDetection.from_pretrained(A	)
					lowerCamelCase    		=  AutoFeatureExtractor.from_pretrained(A	)
					lowerCamelCase    		=  ObjectDetectionPipeline(model=A		,      feature_extractor=A	)

					lowerCamelCase    		=  object_detector("""http://images.cocodataset.org/val2017/000000039769.jpg"""	)
					self.assertEqual(
					    nested_simplify(A		,      decimals=4	)		,      [
					        {"""score""": 0.9982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 1_75, """ymax""": 1_17}},
					        {"""score""": 0.9960, """label""": """remote""", """box""": {"""xmin""": 3_33, """ymin""": 72, """xmax""": 3_68, """ymax""": 1_87}},
					        {"""score""": 0.9955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 6_39, """ymax""": 4_73}},
					        {"""score""": 0.9988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 3_14, """ymax""": 4_70}},
					        {"""score""": 0.9987, """label""": """cat""", """box""": {"""xmin""": 3_45, """ymin""": 23, """xmax""": 6_40, """ymax""": 3_68}},
					    ]		,      )

					lowerCamelCase    		=  object_detector(
					    [
					        """http://images.cocodataset.org/val2017/000000039769.jpg""",
					        """http://images.cocodataset.org/val2017/000000039769.jpg""",
					    ]	)
					self.assertEqual(
					    nested_simplify(A		,      decimals=4	)		,      [
					        [
					            {"""score""": 0.9982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 1_75, """ymax""": 1_17}},
					            {"""score""": 0.9960, """label""": """remote""", """box""": {"""xmin""": 3_33, """ymin""": 72, """xmax""": 3_68, """ymax""": 1_87}},
					            {"""score""": 0.9955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 6_39, """ymax""": 4_73}},
					            {"""score""": 0.9988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 3_14, """ymax""": 4_70}},
					            {"""score""": 0.9987, """label""": """cat""", """box""": {"""xmin""": 3_45, """ymin""": 23, """xmax""": 6_40, """ymax""": 3_68}},
					        ],
					        [
					            {"""score""": 0.9982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 1_75, """ymax""": 1_17}},
					            {"""score""": 0.9960, """label""": """remote""", """box""": {"""xmin""": 3_33, """ymin""": 72, """xmax""": 3_68, """ymax""": 1_87}},
					            {"""score""": 0.9955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 6_39, """ymax""": 4_73}},
					            {"""score""": 0.9988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 3_14, """ymax""": 4_70}},
					            {"""score""": 0.9987, """label""": """cat""", """box""": {"""xmin""": 3_45, """ymin""": 23, """xmax""": 6_40, """ymax""": 3_68}},
					        ],
					    ]		,      )







		@require_torch
		@slow
		def 					__A   ( self	)  -> int:







					'''simple docstring'''







					lowerCamelCase    		=  """facebook/detr-resnet-50"""

					lowerCamelCase    		=  pipeline("""object-detection"""		,      model=A	)

					lowerCamelCase    		=  object_detector("""http://images.cocodataset.org/val2017/000000039769.jpg"""	)
					self.assertEqual(
					    nested_simplify(A		,      decimals=4	)		,      [
					        {"""score""": 0.9982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 1_75, """ymax""": 1_17}},
					        {"""score""": 0.9960, """label""": """remote""", """box""": {"""xmin""": 3_33, """ymin""": 72, """xmax""": 3_68, """ymax""": 1_87}},
					        {"""score""": 0.9955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 6_39, """ymax""": 4_73}},
					        {"""score""": 0.9988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 3_14, """ymax""": 4_70}},
					        {"""score""": 0.9987, """label""": """cat""", """box""": {"""xmin""": 3_45, """ymin""": 23, """xmax""": 6_40, """ymax""": 3_68}},
					    ]		,      )

					lowerCamelCase    		=  object_detector(
					    [
					        """http://images.cocodataset.org/val2017/000000039769.jpg""",
					        """http://images.cocodataset.org/val2017/000000039769.jpg""",
					    ]	)
					self.assertEqual(
					    nested_simplify(A		,      decimals=4	)		,      [
					        [
					            {"""score""": 0.9982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 1_75, """ymax""": 1_17}},
					            {"""score""": 0.9960, """label""": """remote""", """box""": {"""xmin""": 3_33, """ymin""": 72, """xmax""": 3_68, """ymax""": 1_87}},
					            {"""score""": 0.9955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 6_39, """ymax""": 4_73}},
					            {"""score""": 0.9988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 3_14, """ymax""": 4_70}},
					            {"""score""": 0.9987, """label""": """cat""", """box""": {"""xmin""": 3_45, """ymin""": 23, """xmax""": 6_40, """ymax""": 3_68}},
					        ],
					        [
					            {"""score""": 0.9982, """label""": """remote""", """box""": {"""xmin""": 40, """ymin""": 70, """xmax""": 1_75, """ymax""": 1_17}},
					            {"""score""": 0.9960, """label""": """remote""", """box""": {"""xmin""": 3_33, """ymin""": 72, """xmax""": 3_68, """ymax""": 1_87}},
					            {"""score""": 0.9955, """label""": """couch""", """box""": {"""xmin""": 0, """ymin""": 1, """xmax""": 6_39, """ymax""": 4_73}},
					            {"""score""": 0.9988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 3_14, """ymax""": 4_70}},
					            {"""score""": 0.9987, """label""": """cat""", """box""": {"""xmin""": 3_45, """ymin""": 23, """xmax""": 6_40, """ymax""": 3_68}},
					        ],
					    ]		,      )







		@require_torch
		@slow
		def 					__A   ( self	)  -> Optional[int]:







					'''simple docstring'''







					lowerCamelCase    		=  0.9985
					lowerCamelCase    		=  """facebook/detr-resnet-50"""

					lowerCamelCase    		=  pipeline("""object-detection"""		,      model=A	)

					lowerCamelCase    		=  object_detector("""http://images.cocodataset.org/val2017/000000039769.jpg"""		,      threshold=A	)
					self.assertEqual(
					    nested_simplify(A		,      decimals=4	)		,      [
					        {"""score""": 0.9988, """label""": """cat""", """box""": {"""xmin""": 13, """ymin""": 52, """xmax""": 3_14, """ymax""": 4_70}},
					        {"""score""": 0.9987, """label""": """cat""", """box""": {"""xmin""": 3_45, """ymin""": 23, """xmax""": 6_40, """ymax""": 3_68}},
					    ]		,      )







		@require_torch
		@require_pytesseract
		@slow
		def 					__A   ( self	)  -> int:







					'''simple docstring'''







					lowerCamelCase    		=  """Narsil/layoutlmv3-finetuned-funsd"""
					lowerCamelCase    		=  0.9993

					lowerCamelCase    		=  pipeline("""object-detection"""		,      model=A		,      threshold=A	)

					lowerCamelCase    		=  object_detector(
					    """https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png"""	)
					self.assertEqual(
					    nested_simplify(A		,      decimals=4	)		,      [
					        {"""score""": 0.9993, """label""": """I-ANSWER""", """box""": {"""xmin""": 2_94, """ymin""": 2_54, """xmax""": 3_43, """ymax""": 2_64}},
					        {"""score""": 0.9993, """label""": """I-ANSWER""", """box""": {"""xmin""": 2_94, """ymin""": 2_54, """xmax""": 3_43, """ymax""": 2_64}},
					    ]		,      )





# Copyright 2021 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.

import argparse

from .config import config_command_parser
from .config_args import default_config_file, load_config_from_file  # noqa: F401
from .default import default_command_parser
from .update import update_command_parser






def 	__lowerCamelCase						(							lowerCamelCase__		:						Any=None      ):





			'''simple docstring'''




			lowerCamelCase    		=  argparse.ArgumentParser(add_help=lowerCamelCase__  ,							allow_abbrev=lowerCamelCase__      )
			# The main config parser
			lowerCamelCase    		=  config_command_parser(lowerCamelCase__      )
			# The subparser to add commands to
			lowerCamelCase    		=  config_parser.add_subparsers(title="""subcommands"""  ,							dest="""subcommand"""      )

			# Then add other parsers with the parent parser
			default_command_parser(lowerCamelCase__  ,							parents=[parent_parser]      )
			update_command_parser(lowerCamelCase__  ,							parents=[parent_parser]      )

			return config_parser






def 	__lowerCamelCase						(							):





			'''simple docstring'''




			lowerCamelCase    		=  get_config_parser()
			lowerCamelCase    		=  config_parser.parse_args()

			if not hasattr(lowerCamelCase__  ,							"""func"""      ):
						config_parser.print_help()
						exit(1      )

			# Run
			args.func(lowerCamelCase__      )


if __name__ == "__main__":
		main()

