




import hashlib
import unittest
from typing import Dict

import numpy as np

from transformers import (
    MODEL_FOR_MASK_GENERATION_MAPPING,
    TF_MODEL_FOR_MASK_GENERATION_MAPPING,
    is_vision_available,
    pipeline,
)
from transformers.pipelines import MaskGenerationPipeline
from transformers.testing_utils import (
    is_pipeline_test,
    nested_simplify,
    require_tf,
    require_torch,
    require_vision,
    slow,
)


if is_vision_available():
				from PIL import Image
else:

				class 		_snake_case  :






							@staticmethod
							def    SCREAMING_SNAKE_CASE__    (       *a		,					**a)      ->       Optional[Any]:
										pass






def 				lowerCamelCase__				(_UpperCAmelCase):
			SCREAMING_SNAKE_CASE						= hashlib.mda(image.tobytes())
			return m.hexdigest()[:10]






def 				lowerCamelCase__				(_UpperCAmelCase):
			SCREAMING_SNAKE_CASE						= np.array(__UpperCamelCase)
			SCREAMING_SNAKE_CASE						= npimg.shape
			return {"hash": hashimage(__UpperCamelCase), "shape": shape}







@is_pipeline_test
@require_vision
@require_torch
class 		_snake_case  (  unittest.TestCase					):
			_lowercase		:    Dict			     =							dict(
			    (list(MODEL_FOR_MASK_GENERATION_MAPPING.items()					) if MODEL_FOR_MASK_GENERATION_MAPPING else [])					)
			_lowercase		:    List[str]			     =							dict(
			    (list(TF_MODEL_FOR_MASK_GENERATION_MAPPING.items()					) if TF_MODEL_FOR_MASK_GENERATION_MAPPING else [])					)






			def    SCREAMING_SNAKE_CASE__    (       self		,					a		,					a		,					a)      ->       Tuple:
						SCREAMING_SNAKE_CASE						= MaskGenerationPipeline(model=_SCREAMING_SNAKE_CASE		,					image_processor=_SCREAMING_SNAKE_CASE)
						return image_segmenter, [
						    "./tests/fixtures/tests_samples/COCO/000000039769.png",
						    "./tests/fixtures/tests_samples/COCO/000000039769.png",
						]






			def    SCREAMING_SNAKE_CASE__    (       self		,					a		,					a)      ->       Optional[Any]:
						pass






			@require_tf
			@unittest.skip('Image segmentation not implemented in TF')
			def    SCREAMING_SNAKE_CASE__    (       self)      ->       Union[str, Any]:
						pass






			@slow
			@require_torch
			def    SCREAMING_SNAKE_CASE__    (       self)      ->       Dict:
						SCREAMING_SNAKE_CASE						= pipeline('mask-generation'		,					model='facebook/sam-vit-huge')

						SCREAMING_SNAKE_CASE						= image_segmenter('http://images.cocodataset.org/val2017/000000039769.jpg'		,					points_per_batch=256)

						# Shortening by hashing
						SCREAMING_SNAKE_CASE						= []
						for i, o in enumerate(outputs['masks']):
									new_outupt += [{"mask": mask_to_test_readable(_SCREAMING_SNAKE_CASE), "scores": outputs["scores"][i]}]

						# fmt: off
						self.assertEqual(
						    nested_simplify(_SCREAMING_SNAKE_CASE		,					decimals=4)		,					[
						        {'mask': {'hash': '115ad19f5f', 'shape': (480, 640)}, 'scores': 1.04_44},
						        {'mask': {'hash': '6affa964c6', 'shape': (480, 640)}, 'scores': 1.0_21},
						        {'mask': {'hash': 'dfe28a0388', 'shape': (480, 640)}, 'scores': 1.01_67},
						        {'mask': {'hash': 'c0a5f4a318', 'shape': (480, 640)}, 'scores': 1.01_32},
						        {'mask': {'hash': 'fe8065c197', 'shape': (480, 640)}, 'scores': 1.00_53},
						        {'mask': {'hash': 'e2d0b7a0b7', 'shape': (480, 640)}, 'scores': 0.99_67},
						        {'mask': {'hash': '453c7844bd', 'shape': (480, 640)}, 'scores': 0.9_93},
						        {'mask': {'hash': '3d44f2926d', 'shape': (480, 640)}, 'scores': 0.99_09},
						        {'mask': {'hash': '64033ddc3f', 'shape': (480, 640)}, 'scores': 0.98_79},
						        {'mask': {'hash': '801064ff79', 'shape': (480, 640)}, 'scores': 0.98_34},
						        {'mask': {'hash': '6172f276ef', 'shape': (480, 640)}, 'scores': 0.97_16},
						        {'mask': {'hash': 'b49e60e084', 'shape': (480, 640)}, 'scores': 0.96_12},
						        {'mask': {'hash': 'a811e775fd', 'shape': (480, 640)}, 'scores': 0.95_99},
						        {'mask': {'hash': 'a6a8ebcf4b', 'shape': (480, 640)}, 'scores': 0.95_52},
						        {'mask': {'hash': '9d8257e080', 'shape': (480, 640)}, 'scores': 0.95_32},
						        {'mask': {'hash': '32de6454a8', 'shape': (480, 640)}, 'scores': 0.95_16},
						        {'mask': {'hash': 'af3d4af2c8', 'shape': (480, 640)}, 'scores': 0.94_99},
						        {'mask': {'hash': '3c6db475fb', 'shape': (480, 640)}, 'scores': 0.94_83},
						        {'mask': {'hash': 'c290813fb9', 'shape': (480, 640)}, 'scores': 0.94_64},
						        {'mask': {'hash': 'b6f0b8f606', 'shape': (480, 640)}, 'scores': 0.9_43},
						        {'mask': {'hash': '92ce16bfdf', 'shape': (480, 640)}, 'scores': 0.9_43},
						        {'mask': {'hash': 'c749b25868', 'shape': (480, 640)}, 'scores': 0.94_08},
						        {'mask': {'hash': 'efb6cab859', 'shape': (480, 640)}, 'scores': 0.93_35},
						        {'mask': {'hash': '1ff2eafb30', 'shape': (480, 640)}, 'scores': 0.93_26},
						        {'mask': {'hash': '788b798e24', 'shape': (480, 640)}, 'scores': 0.92_62},
						        {'mask': {'hash': 'abea804f0e', 'shape': (480, 640)}, 'scores': 0.89_99},
						        {'mask': {'hash': '7b9e8ddb73', 'shape': (480, 640)}, 'scores': 0.89_86},
						        {'mask': {'hash': 'cd24047c8a', 'shape': (480, 640)}, 'scores': 0.89_84},
						        {'mask': {'hash': '6943e6bcbd', 'shape': (480, 640)}, 'scores': 0.88_73},
						        {'mask': {'hash': 'b5f47c9191', 'shape': (480, 640)}, 'scores': 0.88_71}
						    ]		,					)
						# fmt: on







			@require_torch
			@slow
			def    SCREAMING_SNAKE_CASE__    (       self)      ->       List[Any]:
						SCREAMING_SNAKE_CASE						= 'facebook/sam-vit-huge'
						SCREAMING_SNAKE_CASE						= pipeline('mask-generation'		,					model=_SCREAMING_SNAKE_CASE)

						SCREAMING_SNAKE_CASE						= image_segmenter(
						    'http://images.cocodataset.org/val2017/000000039769.jpg'		,					pred_iou_thresh=1		,					points_per_batch=256)

						# Shortening by hashing
						SCREAMING_SNAKE_CASE						= []
						for i, o in enumerate(outputs['masks']):
									new_outupt += [{"mask": mask_to_test_readable(_SCREAMING_SNAKE_CASE), "scores": outputs["scores"][i]}]

						self.assertEqual(
						    nested_simplify(_SCREAMING_SNAKE_CASE		,					decimals=4)		,					[
						        {'mask': {'hash': '115ad19f5f', 'shape': (480, 640)}, 'scores': 1.04_44},
						        {'mask': {'hash': '6affa964c6', 'shape': (480, 640)}, 'scores': 1.02_10},
						        {'mask': {'hash': 'dfe28a0388', 'shape': (480, 640)}, 'scores': 1.01_67},
						        {'mask': {'hash': 'c0a5f4a318', 'shape': (480, 640)}, 'scores': 1.01_32},
						        {'mask': {'hash': 'fe8065c197', 'shape': (480, 640)}, 'scores': 1.00_53},
						    ]		,					)












# tests directory-specific settings - this file is run automatically
# by pytest before any tests are run

import doctest
import sys
import warnings
from os.path import abspath, dirname, join

import _pytest

from transformers.testing_utils import HfDoctestModule, HfDocTestParser


# allow having multiple repository checkouts and not needing to remember to rerun
# 'pip install -e .[dev]' when switching between checkouts and running tests.
a_		:						List[str]             =    abspath(join(dirname(__file__), 'src'))
sys.path.insert(1, git_repo_path)

# silence FutureWarning warnings in tests since often we can't act on them until
# they become normal warnings - i.e. the tests still need to test the current functionality
warnings.simplefilter(action='ignore', category=FutureWarning)






def 				lowerCamelCase__				(_UpperCAmelCase):
			config.addinivalue_line(
			    'markers'							,       'is_pt_tf_cross_test: mark test to run only when PT and TF interactions are tested')
			config.addinivalue_line(
			    'markers'							,       'is_pt_flax_cross_test: mark test to run only when PT and FLAX interactions are tested')
			config.addinivalue_line('markers'							,       'is_pipeline_test: mark test to run only when pipelines are tested')
			config.addinivalue_line('markers'							,       'is_staging_test: mark test to run only in the staging environment')
			config.addinivalue_line('markers'							,       'accelerate_tests: mark test that require accelerate')
			config.addinivalue_line('markers'							,       'tool_tests: mark the tool tests that are run on their specific schedule')






def 				lowerCamelCase__				(_UpperCAmelCase):
			from transformers.testing_utils import pytest_addoption_shared

			pytest_addoption_shared(_UpperCAmelCase)






def 				lowerCamelCase__				(_UpperCAmelCase):
			from transformers.testing_utils import pytest_terminal_summary_main

			SCREAMING_SNAKE_CASE						= terminalreporter.config.getoption('--make-reports')
			if make_reports:
						pytest_terminal_summary_main(_UpperCAmelCase							,       id=_UpperCAmelCase)






def 				lowerCamelCase__				(_UpperCAmelCase							,       _UpperCAmelCase):
			# If no tests are collected, pytest exists with code 5, which makes the CI fail.
			if exitstatus == 5:
						SCREAMING_SNAKE_CASE						= 0


# Doctest custom flag to ignore output.
a_		:						List[Any]             =    doctest.register_optionflag('IGNORE_RESULT')

a_		:						Any             =    doctest.OutputChecker

class 		_snake_case  (  A__					):






			def    SCREAMING_SNAKE_CASE__    (       self		,					a		,					a		,					a)      ->       List[Any]:
						if IGNORE_RESULT & optionflags:
									return True
						return OutputChecker.check_output(self		,					a		,					a		,					a)



a_		:						int             =    CustomOutputChecker
a_		:						List[str]             =    HfDoctestModule







a_		:						Optional[int]             =    HfDocTestParser




