






"""simple docstring"""






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_       :



						"""simple docstring"""

						@staticmethod
						def       _UpperCAmelCase						(      *__a  ,					**__a						):


										"""simple docstring"""

										pass



def  __lowerCamelCase					(					lowerCAmelCase__				):
				A__							 =       hashlib.mda(image.tobytes()				)
				return m.hexdigest()[:10]



def  __lowerCamelCase					(					lowerCAmelCase__				):
				A__							 =       np.array(lowerCAmelCase__				)
				A__							 =       npimg.shape
				return {"hash": hashimage(lowerCAmelCase__				), "shape": shape}







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



	"""simple docstring"""

	SCREAMING_SNAKE_CASE_:							int   			=					dict(
	    (list(MODEL_FOR_MASK_GENERATION_MAPPING.items()       ) if MODEL_FOR_MASK_GENERATION_MAPPING else [])       )
	SCREAMING_SNAKE_CASE_:							int   			=					dict(
	    (list(TF_MODEL_FOR_MASK_GENERATION_MAPPING.items()       ) if TF_MODEL_FOR_MASK_GENERATION_MAPPING else [])       )


	def       _UpperCAmelCase						(      self  ,					__a  ,					__a  ,					__a						):


					"""simple docstring"""

					A__							 =       MaskGenerationPipeline(model=__a  ,					image_processor=__a						)
					return image_segmenter, [
					    "./tests/fixtures/tests_samples/COCO/000000039769.png",
					    "./tests/fixtures/tests_samples/COCO/000000039769.png",
					]


	def       _UpperCAmelCase						(      self  ,					__a  ,					__a						):


					"""simple docstring"""

					pass


	@require_tf
	@unittest.skip('Image segmentation not implemented in TF'						)
	def       _UpperCAmelCase						(      self						):


					"""simple docstring"""

					pass


	@slow
	@require_torch
	def       _UpperCAmelCase						(      self						):


					"""simple docstring"""

					A__							 =       pipeline('mask-generation'  ,					model='facebook/sam-vit-huge'						)

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

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

					# fmt: off
					self.assertEqual(
					    nested_simplify(__a  ,					decimals=4						)  ,					[
					        {'mask': {'hash': '115ad19f5f', 'shape': (480, 640)}, 'scores': 1.0444},
					        {'mask': {'hash': '6affa964c6', 'shape': (480, 640)}, 'scores': 1.021},
					        {'mask': {'hash': 'dfe28a0388', 'shape': (480, 640)}, 'scores': 1.0167},
					        {'mask': {'hash': 'c0a5f4a318', 'shape': (480, 640)}, 'scores': 1.0132},
					        {'mask': {'hash': 'fe8065c197', 'shape': (480, 640)}, 'scores': 1.0053},
					        {'mask': {'hash': 'e2d0b7a0b7', 'shape': (480, 640)}, 'scores': 0.9967},
					        {'mask': {'hash': '453c7844bd', 'shape': (480, 640)}, 'scores': 0.993},
					        {'mask': {'hash': '3d44f2926d', 'shape': (480, 640)}, 'scores': 0.9909},
					        {'mask': {'hash': '64033ddc3f', 'shape': (480, 640)}, 'scores': 0.9879},
					        {'mask': {'hash': '801064ff79', 'shape': (480, 640)}, 'scores': 0.9834},
					        {'mask': {'hash': '6172f276ef', 'shape': (480, 640)}, 'scores': 0.9716},
					        {'mask': {'hash': 'b49e60e084', 'shape': (480, 640)}, 'scores': 0.9612},
					        {'mask': {'hash': 'a811e775fd', 'shape': (480, 640)}, 'scores': 0.9599},
					        {'mask': {'hash': 'a6a8ebcf4b', 'shape': (480, 640)}, 'scores': 0.9552},
					        {'mask': {'hash': '9d8257e080', 'shape': (480, 640)}, 'scores': 0.9532},
					        {'mask': {'hash': '32de6454a8', 'shape': (480, 640)}, 'scores': 0.9516},
					        {'mask': {'hash': 'af3d4af2c8', 'shape': (480, 640)}, 'scores': 0.9499},
					        {'mask': {'hash': '3c6db475fb', 'shape': (480, 640)}, 'scores': 0.9483},
					        {'mask': {'hash': 'c290813fb9', 'shape': (480, 640)}, 'scores': 0.9464},
					        {'mask': {'hash': 'b6f0b8f606', 'shape': (480, 640)}, 'scores': 0.943},
					        {'mask': {'hash': '92ce16bfdf', 'shape': (480, 640)}, 'scores': 0.943},
					        {'mask': {'hash': 'c749b25868', 'shape': (480, 640)}, 'scores': 0.9408},
					        {'mask': {'hash': 'efb6cab859', 'shape': (480, 640)}, 'scores': 0.9335},
					        {'mask': {'hash': '1ff2eafb30', 'shape': (480, 640)}, 'scores': 0.9326},
					        {'mask': {'hash': '788b798e24', 'shape': (480, 640)}, 'scores': 0.9262},
					        {'mask': {'hash': 'abea804f0e', 'shape': (480, 640)}, 'scores': 0.8999},
					        {'mask': {'hash': '7b9e8ddb73', 'shape': (480, 640)}, 'scores': 0.8986},
					        {'mask': {'hash': 'cd24047c8a', 'shape': (480, 640)}, 'scores': 0.8984},
					        {'mask': {'hash': '6943e6bcbd', 'shape': (480, 640)}, 'scores': 0.8873},
					        {'mask': {'hash': 'b5f47c9191', 'shape': (480, 640)}, 'scores': 0.8871}
					    ]  ,					)
					# fmt: on






	@require_torch
	@slow
	def       _UpperCAmelCase						(      self						):


					"""simple docstring"""

					A__							 =       'facebook/sam-vit-huge'
					A__							 =       pipeline('mask-generation'  ,					model=__a						)

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

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

					self.assertEqual(
					    nested_simplify(__a  ,					decimals=4						)  ,					[
					        {'mask': {'hash': '115ad19f5f', 'shape': (480, 640)}, 'scores': 1.0444},
					        {'mask': {'hash': '6affa964c6', 'shape': (480, 640)}, 'scores': 1.0210},
					        {'mask': {'hash': 'dfe28a0388', 'shape': (480, 640)}, 'scores': 1.0167},
					        {'mask': {'hash': 'c0a5f4a318', 'shape': (480, 640)}, 'scores': 1.0132},
					        {'mask': {'hash': 'fe8065c197', 'shape': (480, 640)}, 'scores': 1.0053},
					    ]  ,					)










"""simple docstring"""






from ...processing_utils import ProcessorMixin





class       snake_case_       (    _lowerCamelCase       ):



	"""simple docstring"""

	SCREAMING_SNAKE_CASE_:							List[str]   			=					"""WhisperFeatureExtractor"""
	SCREAMING_SNAKE_CASE_:							Union[str, Any]   			=					"""WhisperTokenizer"""


	def __init__(      self  ,					__a  ,					__a						):


					"""simple docstring"""

					super().__init__(__a  ,					__a						)
					A__							 =       self.feature_extractor
					A__							 =       False


	def       _UpperCAmelCase						(      self  ,					__a=None  ,					__a=None  ,					__a=True						):


					"""simple docstring"""

					return self.tokenizer.get_decoder_prompt_ids(task=__a  ,					language=__a  ,					no_timestamps=__a						)


	def __call__(      self  ,					*__a  ,					**__a						):


					"""simple docstring"""

					if self._in_target_context_manager:
									return self.current_processor(*__a  ,					**__a						)

					A__							 =       kwargs.pop('audio'  ,					__a						)
					A__							 =       kwargs.pop('sampling_rate'  ,					__a						)
					A__							 =       kwargs.pop('text'  ,					__a						)
					if len(__a						) > 0:
									A__							 =       args[0]
									A__							 =       args[1:]

					if audio is None and text is None:
									raise ValueError('You need to specify either an `audio` or `text` input to process.'						)

					if audio is not None:
									A__							 =       self.feature_extractor(__a  ,					*__a  ,					sampling_rate=__a  ,					**__a						)
					if text is not None:
									A__							 =       self.tokenizer(__a  ,					**__a						)

					if text is None:
									return inputs

					elif audio is None:
									return encodings
					else:
									A__							 =       encodings['input_ids']
									return inputs


	def       _UpperCAmelCase						(      self  ,					*__a  ,					**__a						):


					"""simple docstring"""

					return self.tokenizer.batch_decode(*__a  ,					**__a						)


	def       _UpperCAmelCase						(      self  ,					*__a  ,					**__a						):


					"""simple docstring"""

					return self.tokenizer.decode(*__a  ,					**__a						)






	def       _UpperCAmelCase						(      self  ,					__a  ,					__a="np"						):


					"""simple docstring"""

					return self.tokenizer.get_prompt_ids(__a  ,					return_tensors=__a						)


