





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







									@staticmethod
									def        lowercase       (    *__snake_case ,						**__snake_case				)      ->      Optional[int]:


														'''simple docstring'''

														pass







def    A				(							UpperCAmelCase				):
					_snake_case       :					List[str]				       =   hashlib.mda(image.tobytes()				)
					return m.hexdigest()[:10]







def    A				(							UpperCAmelCase				):
					_snake_case       :					List[str]				       =   np.array(UpperCAmelCase				)
					_snake_case       :					str				       =   npimg.shape
					return {"hash": hashimage(UpperCAmelCase				), "shape": shape}






@is_pipeline_test
@require_vision
@require_torch
class        _a(    unittest.TestCase    ):
		lowerCamelCase__     :Tuple   				=		dict(
		    (list(MODEL_FOR_MASK_GENERATION_MAPPING.items()    ) if MODEL_FOR_MASK_GENERATION_MAPPING else [])    )
		lowerCamelCase__     :Optional[int]   				=		dict(
		    (list(TF_MODEL_FOR_MASK_GENERATION_MAPPING.items()    ) if TF_MODEL_FOR_MASK_GENERATION_MAPPING else [])    )







		def        lowercase       (    self ,						__snake_case ,						__snake_case ,						__snake_case				)      ->      List[str]:


							'''simple docstring'''

							_snake_case       :					Any				       =   MaskGenerationPipeline(model=__snake_case ,						image_processor=__snake_case				)
							return image_segmenter, [
							    "./tests/fixtures/tests_samples/COCO/000000039769.png",
							    "./tests/fixtures/tests_samples/COCO/000000039769.png",
							]







		def        lowercase       (    self ,						__snake_case ,						__snake_case				)      ->      Any:


							'''simple docstring'''

							pass







		@require_tf
		@unittest.skip("Image segmentation not implemented in TF"				)
		def        lowercase       (    self				)      ->      List[str]:


							'''simple docstring'''

							pass







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


							'''simple docstring'''

							_snake_case       :					Optional[Any]				       =   pipeline("mask-generation" ,						model="facebook/sam-vit-huge"				)

							_snake_case       :					List[str]				       =   image_segmenter("http://images.cocodataset.org/val2017/000000039769.jpg" ,						points_per_batch=2_5_6				)

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

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







		@require_torch
		@slow
		def        lowercase       (    self				)      ->      List[Any]:


							'''simple docstring'''

							_snake_case       :					Any				       =   "facebook/sam-vit-huge"
							_snake_case       :					str				       =   pipeline("mask-generation" ,						model=__snake_case				)

							_snake_case       :					Optional[int]				       =   image_segmenter(
							    "http://images.cocodataset.org/val2017/000000039769.jpg" ,						pred_iou_thresh=1 ,						points_per_batch=2_5_6				)

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

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






from ...configuration_utils import PretrainedConfig
from ...utils import logging


__lowerCAmelCase :Tuple     =    logging.get_logger(__name__)

__lowerCAmelCase :int     =    {
    'facebook/timesformer': 'https://huggingface.co/facebook/timesformer/resolve/main/config.json',
}






class        _a(    __A    ):
		lowerCamelCase__     :Optional[Any]   				=		'timesformer'







		def __init__(    self ,						__snake_case=2_2_4 ,						__snake_case=1_6 ,						__snake_case=3 ,						__snake_case=8 ,						__snake_case=7_6_8 ,						__snake_case=1_2 ,						__snake_case=1_2 ,						__snake_case=3_0_7_2 ,						__snake_case="gelu" ,						__snake_case=0.0 ,						__snake_case=0.0 ,						__snake_case=0.02 ,						__snake_case=1E-6 ,						__snake_case=True ,						__snake_case="divided_space_time" ,						__snake_case=0 ,						**__snake_case ,						)      ->      str:


							'''simple docstring'''

							super().__init__(**__snake_case				)

							_snake_case       :					Optional[Any]				       =   image_size
							_snake_case       :					Optional[int]				       =   patch_size
							_snake_case       :					str				       =   num_channels
							_snake_case       :					Tuple				       =   num_frames

							_snake_case       :					Union[str, Any]				       =   hidden_size
							_snake_case       :					Optional[int]				       =   num_hidden_layers
							_snake_case       :					List[Any]				       =   num_attention_heads
							_snake_case       :					Optional[int]				       =   intermediate_size
							_snake_case       :					List[str]				       =   hidden_act
							_snake_case       :					Optional[int]				       =   hidden_dropout_prob
							_snake_case       :					Optional[Any]				       =   attention_probs_dropout_prob
							_snake_case       :					Dict				       =   initializer_range
							_snake_case       :					Optional[int]				       =   layer_norm_eps
							_snake_case       :					str				       =   qkv_bias

							_snake_case       :					List[str]				       =   attention_type
							_snake_case       :					Optional[int]				       =   drop_path_rate