

'''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     a			:






											"""simple docstring"""




											@staticmethod
											def       __magic_name__							(							*snake_case_					:      List[Any]			,			**snake_case_					:      Tuple  ):



													'''simple docstring'''



													pass




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






						"""simple docstring"""




						__UpperCAmelCase			     =    MODEL_FOR_OBJECT_DETECTION_MAPPING







						def       __magic_name__							(							self					:      Tuple			,			snake_case_					:      Optional[Any]			,			snake_case_					:      List[Any]			,			snake_case_					:      List[str]  ):



								'''simple docstring'''



								snake_case__						:       List[str]       						=  ObjectDetectionPipeline(model=snake_case_			,			image_processor=snake_case_  )
								return object_detector, ["./tests/fixtures/tests_samples/COCO/000000039769.png"]







						def       __magic_name__							(							self					:      Union[str, Any]			,			snake_case_					:      Optional[int]			,			snake_case_					:      List[str]  ):



								'''simple docstring'''



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

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

								import datasets

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

								snake_case__						:       Union[str, Any]       						=  [
								    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'''],
								]
								snake_case__						:       Union[str, Any]       						=  object_detector(snake_case_			,			threshold=0.0  )

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







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



								'''simple docstring'''



								pass







						@require_torch
						def       __magic_name__							(							self					:      Tuple  ):



								'''simple docstring'''



								snake_case__						:       List[Any]       						=  '''hf-internal-testing/tiny-detr-mobilenetsv3'''

								snake_case__						:       int       						=  AutoModelForObjectDetection.from_pretrained(snake_case_  )
								snake_case__						:       Tuple       						=  AutoFeatureExtractor.from_pretrained(snake_case_  )
								snake_case__						:       Dict       						=  ObjectDetectionPipeline(model=snake_case_			,			feature_extractor=snake_case_  )

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

								self.assertEqual(
								    nested_simplify(snake_case_			,			decimals=4  )			,			[
								        {'''score''': 0.3_3_7_6, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_5_9, '''ymin''': 1_2_0, '''xmax''': 4_8_0, '''ymax''': 3_5_9}},
								        {'''score''': 0.3_3_7_6, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_5_9, '''ymin''': 1_2_0, '''xmax''': 4_8_0, '''ymax''': 3_5_9}},
								    ]			,			)

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

								self.assertEqual(
								    nested_simplify(snake_case_			,			decimals=4  )			,			[
								        [
								            {'''score''': 0.3_3_7_6, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_5_9, '''ymin''': 1_2_0, '''xmax''': 4_8_0, '''ymax''': 3_5_9}},
								            {'''score''': 0.3_3_7_6, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_5_9, '''ymin''': 1_2_0, '''xmax''': 4_8_0, '''ymax''': 3_5_9}},
								        ],
								        [
								            {'''score''': 0.3_3_7_6, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_5_9, '''ymin''': 1_2_0, '''xmax''': 4_8_0, '''ymax''': 3_5_9}},
								            {'''score''': 0.3_3_7_6, '''label''': '''LABEL_0''', '''box''': {'''xmin''': 1_5_9, '''ymin''': 1_2_0, '''xmax''': 4_8_0, '''ymax''': 3_5_9}},
								        ],
								    ]			,			)







						@require_torch
						@slow
						def       __magic_name__							(							self					:      Union[str, Any]  ):



								'''simple docstring'''



								snake_case__						:       str       						=  '''facebook/detr-resnet-50'''

								snake_case__						:       Any       						=  AutoModelForObjectDetection.from_pretrained(snake_case_  )
								snake_case__						:       int       						=  AutoFeatureExtractor.from_pretrained(snake_case_  )
								snake_case__						:       List[str]       						=  ObjectDetectionPipeline(model=snake_case_			,			feature_extractor=snake_case_  )

								snake_case__						:       Tuple       						=  object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''  )
								self.assertEqual(
								    nested_simplify(snake_case_			,			decimals=4  )			,			[
								        {'''score''': 0.9_9_8_2, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_0, '''xmax''': 1_7_5, '''ymax''': 1_1_7}},
								        {'''score''': 0.9_9_6_0, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_3, '''ymin''': 7_2, '''xmax''': 3_6_8, '''ymax''': 1_8_7}},
								        {'''score''': 0.9_9_5_5, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_3_9, '''ymax''': 4_7_3}},
								        {'''score''': 0.9_9_8_8, '''label''': '''cat''', '''box''': {'''xmin''': 1_3, '''ymin''': 5_2, '''xmax''': 3_1_4, '''ymax''': 4_7_0}},
								        {'''score''': 0.9_9_8_7, '''label''': '''cat''', '''box''': {'''xmin''': 3_4_5, '''ymin''': 2_3, '''xmax''': 6_4_0, '''ymax''': 3_6_8}},
								    ]			,			)

								snake_case__						:       str       						=  object_detector(
								    [
								        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
								        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
								    ]  )
								self.assertEqual(
								    nested_simplify(snake_case_			,			decimals=4  )			,			[
								        [
								            {'''score''': 0.9_9_8_2, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_0, '''xmax''': 1_7_5, '''ymax''': 1_1_7}},
								            {'''score''': 0.9_9_6_0, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_3, '''ymin''': 7_2, '''xmax''': 3_6_8, '''ymax''': 1_8_7}},
								            {'''score''': 0.9_9_5_5, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_3_9, '''ymax''': 4_7_3}},
								            {'''score''': 0.9_9_8_8, '''label''': '''cat''', '''box''': {'''xmin''': 1_3, '''ymin''': 5_2, '''xmax''': 3_1_4, '''ymax''': 4_7_0}},
								            {'''score''': 0.9_9_8_7, '''label''': '''cat''', '''box''': {'''xmin''': 3_4_5, '''ymin''': 2_3, '''xmax''': 6_4_0, '''ymax''': 3_6_8}},
								        ],
								        [
								            {'''score''': 0.9_9_8_2, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_0, '''xmax''': 1_7_5, '''ymax''': 1_1_7}},
								            {'''score''': 0.9_9_6_0, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_3, '''ymin''': 7_2, '''xmax''': 3_6_8, '''ymax''': 1_8_7}},
								            {'''score''': 0.9_9_5_5, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_3_9, '''ymax''': 4_7_3}},
								            {'''score''': 0.9_9_8_8, '''label''': '''cat''', '''box''': {'''xmin''': 1_3, '''ymin''': 5_2, '''xmax''': 3_1_4, '''ymax''': 4_7_0}},
								            {'''score''': 0.9_9_8_7, '''label''': '''cat''', '''box''': {'''xmin''': 3_4_5, '''ymin''': 2_3, '''xmax''': 6_4_0, '''ymax''': 3_6_8}},
								        ],
								    ]			,			)







						@require_torch
						@slow
						def       __magic_name__							(							self					:      Dict  ):



								'''simple docstring'''



								snake_case__						:       Union[str, Any]       						=  '''facebook/detr-resnet-50'''

								snake_case__						:       str       						=  pipeline('''object-detection'''			,			model=snake_case_  )

								snake_case__						:       Tuple       						=  object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''  )
								self.assertEqual(
								    nested_simplify(snake_case_			,			decimals=4  )			,			[
								        {'''score''': 0.9_9_8_2, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_0, '''xmax''': 1_7_5, '''ymax''': 1_1_7}},
								        {'''score''': 0.9_9_6_0, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_3, '''ymin''': 7_2, '''xmax''': 3_6_8, '''ymax''': 1_8_7}},
								        {'''score''': 0.9_9_5_5, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_3_9, '''ymax''': 4_7_3}},
								        {'''score''': 0.9_9_8_8, '''label''': '''cat''', '''box''': {'''xmin''': 1_3, '''ymin''': 5_2, '''xmax''': 3_1_4, '''ymax''': 4_7_0}},
								        {'''score''': 0.9_9_8_7, '''label''': '''cat''', '''box''': {'''xmin''': 3_4_5, '''ymin''': 2_3, '''xmax''': 6_4_0, '''ymax''': 3_6_8}},
								    ]			,			)

								snake_case__						:       Union[str, Any]       						=  object_detector(
								    [
								        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
								        '''http://images.cocodataset.org/val2017/000000039769.jpg''',
								    ]  )
								self.assertEqual(
								    nested_simplify(snake_case_			,			decimals=4  )			,			[
								        [
								            {'''score''': 0.9_9_8_2, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_0, '''xmax''': 1_7_5, '''ymax''': 1_1_7}},
								            {'''score''': 0.9_9_6_0, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_3, '''ymin''': 7_2, '''xmax''': 3_6_8, '''ymax''': 1_8_7}},
								            {'''score''': 0.9_9_5_5, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_3_9, '''ymax''': 4_7_3}},
								            {'''score''': 0.9_9_8_8, '''label''': '''cat''', '''box''': {'''xmin''': 1_3, '''ymin''': 5_2, '''xmax''': 3_1_4, '''ymax''': 4_7_0}},
								            {'''score''': 0.9_9_8_7, '''label''': '''cat''', '''box''': {'''xmin''': 3_4_5, '''ymin''': 2_3, '''xmax''': 6_4_0, '''ymax''': 3_6_8}},
								        ],
								        [
								            {'''score''': 0.9_9_8_2, '''label''': '''remote''', '''box''': {'''xmin''': 4_0, '''ymin''': 7_0, '''xmax''': 1_7_5, '''ymax''': 1_1_7}},
								            {'''score''': 0.9_9_6_0, '''label''': '''remote''', '''box''': {'''xmin''': 3_3_3, '''ymin''': 7_2, '''xmax''': 3_6_8, '''ymax''': 1_8_7}},
								            {'''score''': 0.9_9_5_5, '''label''': '''couch''', '''box''': {'''xmin''': 0, '''ymin''': 1, '''xmax''': 6_3_9, '''ymax''': 4_7_3}},
								            {'''score''': 0.9_9_8_8, '''label''': '''cat''', '''box''': {'''xmin''': 1_3, '''ymin''': 5_2, '''xmax''': 3_1_4, '''ymax''': 4_7_0}},
								            {'''score''': 0.9_9_8_7, '''label''': '''cat''', '''box''': {'''xmin''': 3_4_5, '''ymin''': 2_3, '''xmax''': 6_4_0, '''ymax''': 3_6_8}},
								        ],
								    ]			,			)







						@require_torch
						@slow
						def       __magic_name__							(							self					:      Optional[int]  ):



								'''simple docstring'''



								snake_case__						:       List[str]       						=  0.9_9_8_5
								snake_case__						:       str       						=  '''facebook/detr-resnet-50'''

								snake_case__						:       List[Any]       						=  pipeline('''object-detection'''			,			model=snake_case_  )

								snake_case__						:       Optional[Any]       						=  object_detector('''http://images.cocodataset.org/val2017/000000039769.jpg'''			,			threshold=snake_case_  )
								self.assertEqual(
								    nested_simplify(snake_case_			,			decimals=4  )			,			[
								        {'''score''': 0.9_9_8_8, '''label''': '''cat''', '''box''': {'''xmin''': 1_3, '''ymin''': 5_2, '''xmax''': 3_1_4, '''ymax''': 4_7_0}},
								        {'''score''': 0.9_9_8_7, '''label''': '''cat''', '''box''': {'''xmin''': 3_4_5, '''ymin''': 2_3, '''xmax''': 6_4_0, '''ymax''': 3_6_8}},
								    ]			,			)







						@require_torch
						@require_pytesseract
						@slow
						def       __magic_name__							(							self					:      int  ):



								'''simple docstring'''



								snake_case__						:       Any       						=  '''Narsil/layoutlmv3-finetuned-funsd'''
								snake_case__						:       List[str]       						=  0.9_9_9_3

								snake_case__						:       str       						=  pipeline('''object-detection'''			,			model=snake_case_			,			threshold=snake_case_  )

								snake_case__						:       int       						=  object_detector(
								    '''https://huggingface.co/spaces/impira/docquery/resolve/2359223c1837a7587402bda0f2643382a6eefeab/invoice.png'''  )
								self.assertEqual(
								    nested_simplify(snake_case_			,			decimals=4  )			,			[
								        {'''score''': 0.9_9_9_3, '''label''': '''I-ANSWER''', '''box''': {'''xmin''': 2_9_4, '''ymin''': 2_5_4, '''xmax''': 3_4_3, '''ymax''': 2_6_4}},
								        {'''score''': 0.9_9_9_3, '''label''': '''I-ANSWER''', '''box''': {'''xmin''': 2_9_4, '''ymin''': 2_5_4, '''xmax''': 3_4_3, '''ymax''': 2_6_4}},
								    ]			,			)






'''simple docstring'''


def 	_a       (				__lowerCAmelCase		:      float   ,							__lowerCAmelCase		:      float   ,							__lowerCAmelCase		:      int     ):

		"""simple docstring"""

		if principal <= 0:
				raise Exception('''Principal borrowed must be > 0'''     )
		if rate_per_annum < 0:
				raise Exception('''Rate of interest must be >= 0'''     )
		if years_to_repay <= 0 or not isinstance(__lowerCAmelCase   ,							__lowerCAmelCase     ):
				raise Exception('''Years to repay must be an integer > 0'''     )

		# Yearly rate is divided by 12 to get monthly rate
		snake_case__						:       int       						=  rate_per_annum / 12

		# Years to repay is multiplied by 12 to get number of payments as payment is monthly
		snake_case__						:       Tuple       						=  years_to_repay * 12

		return (
		    principal
		    * rate_per_month
		    * (1 + rate_per_month) ** number_of_payments
		    / ((1 + rate_per_month) ** number_of_payments - 1)
		)


if __name__ == "__main__":
					import doctest

					doctest.testmod()



