






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

							@staticmethod
							def 						A__		(   *_SCREAMING_SNAKE_CASE    ,	**_SCREAMING_SNAKE_CASE   )						->   Optional[Any]:



													"""simple docstring"""






													pass







def 					lowercase__				(   __UpperCamelCase					)->				str:
						UpperCamelCase       						=      hashlib.mda(image.tobytes()					)
						return m.hexdigest()[:10]







def 					lowercase__				(   __UpperCamelCase					)->				Dict:
						UpperCamelCase       						=      np.array(__UpperCamelCase					)
						UpperCamelCase       						=      npimg.shape
						return {"hash": hashimage(__UpperCamelCase					), "shape": shape}






@is_pipeline_test
@require_vision
@require_torch
class        a_		(    unittest.TestCase       ):
		lowercase  	=   dict(
		    (list(MODEL_FOR_MASK_GENERATION_MAPPING.items()       ) if MODEL_FOR_MASK_GENERATION_MAPPING else [])       )
		lowercase  	=   dict(
		    (list(TF_MODEL_FOR_MASK_GENERATION_MAPPING.items()       ) if TF_MODEL_FOR_MASK_GENERATION_MAPPING else [])       )

		def 						A__		(   self    ,	_SCREAMING_SNAKE_CASE    ,	_SCREAMING_SNAKE_CASE    ,	_SCREAMING_SNAKE_CASE   )						->   Tuple:



								"""simple docstring"""






								UpperCamelCase       						=      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 						A__		(   self    ,	_SCREAMING_SNAKE_CASE    ,	_SCREAMING_SNAKE_CASE   )						->   Optional[Any]:



								"""simple docstring"""






								pass

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



								"""simple docstring"""






								pass

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



								"""simple docstring"""






								UpperCamelCase       						=      pipeline("""mask-generation"""    ,	model="""facebook/sam-vit-huge"""   )

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

								# Shortening by hashing
								UpperCamelCase       						=      []
								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.0_4_4_4},
								        {"""mask""": {"""hash""": """6affa964c6""", """shape""": (480, 640)}, """scores""": 1.0_2_1},
								        {"""mask""": {"""hash""": """dfe28a0388""", """shape""": (480, 640)}, """scores""": 1.0_1_6_7},
								        {"""mask""": {"""hash""": """c0a5f4a318""", """shape""": (480, 640)}, """scores""": 1.0_1_3_2},
								        {"""mask""": {"""hash""": """fe8065c197""", """shape""": (480, 640)}, """scores""": 1.0_0_5_3},
								        {"""mask""": {"""hash""": """e2d0b7a0b7""", """shape""": (480, 640)}, """scores""": 0.9_9_6_7},
								        {"""mask""": {"""hash""": """453c7844bd""", """shape""": (480, 640)}, """scores""": 0.9_9_3},
								        {"""mask""": {"""hash""": """3d44f2926d""", """shape""": (480, 640)}, """scores""": 0.9_9_0_9},
								        {"""mask""": {"""hash""": """64033ddc3f""", """shape""": (480, 640)}, """scores""": 0.9_8_7_9},
								        {"""mask""": {"""hash""": """801064ff79""", """shape""": (480, 640)}, """scores""": 0.9_8_3_4},
								        {"""mask""": {"""hash""": """6172f276ef""", """shape""": (480, 640)}, """scores""": 0.9_7_1_6},
								        {"""mask""": {"""hash""": """b49e60e084""", """shape""": (480, 640)}, """scores""": 0.9_6_1_2},
								        {"""mask""": {"""hash""": """a811e775fd""", """shape""": (480, 640)}, """scores""": 0.9_5_9_9},
								        {"""mask""": {"""hash""": """a6a8ebcf4b""", """shape""": (480, 640)}, """scores""": 0.9_5_5_2},
								        {"""mask""": {"""hash""": """9d8257e080""", """shape""": (480, 640)}, """scores""": 0.9_5_3_2},
								        {"""mask""": {"""hash""": """32de6454a8""", """shape""": (480, 640)}, """scores""": 0.9_5_1_6},
								        {"""mask""": {"""hash""": """af3d4af2c8""", """shape""": (480, 640)}, """scores""": 0.9_4_9_9},
								        {"""mask""": {"""hash""": """3c6db475fb""", """shape""": (480, 640)}, """scores""": 0.9_4_8_3},
								        {"""mask""": {"""hash""": """c290813fb9""", """shape""": (480, 640)}, """scores""": 0.9_4_6_4},
								        {"""mask""": {"""hash""": """b6f0b8f606""", """shape""": (480, 640)}, """scores""": 0.9_4_3},
								        {"""mask""": {"""hash""": """92ce16bfdf""", """shape""": (480, 640)}, """scores""": 0.9_4_3},
								        {"""mask""": {"""hash""": """c749b25868""", """shape""": (480, 640)}, """scores""": 0.9_4_0_8},
								        {"""mask""": {"""hash""": """efb6cab859""", """shape""": (480, 640)}, """scores""": 0.9_3_3_5},
								        {"""mask""": {"""hash""": """1ff2eafb30""", """shape""": (480, 640)}, """scores""": 0.9_3_2_6},
								        {"""mask""": {"""hash""": """788b798e24""", """shape""": (480, 640)}, """scores""": 0.9_2_6_2},
								        {"""mask""": {"""hash""": """abea804f0e""", """shape""": (480, 640)}, """scores""": 0.8_9_9_9},
								        {"""mask""": {"""hash""": """7b9e8ddb73""", """shape""": (480, 640)}, """scores""": 0.8_9_8_6},
								        {"""mask""": {"""hash""": """cd24047c8a""", """shape""": (480, 640)}, """scores""": 0.8_9_8_4},
								        {"""mask""": {"""hash""": """6943e6bcbd""", """shape""": (480, 640)}, """scores""": 0.8_8_7_3},
								        {"""mask""": {"""hash""": """b5f47c9191""", """shape""": (480, 640)}, """scores""": 0.8_8_7_1}
								    ]    ,	)
								# fmt: on


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



								"""simple docstring"""






								UpperCamelCase       						=      """facebook/sam-vit-huge"""
								UpperCamelCase       						=      pipeline("""mask-generation"""    ,	model=_SCREAMING_SNAKE_CASE   )

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

								# Shortening by hashing
								UpperCamelCase       						=      []
								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.0_4_4_4},
								        {"""mask""": {"""hash""": """6affa964c6""", """shape""": (480, 640)}, """scores""": 1.0_2_1_0},
								        {"""mask""": {"""hash""": """dfe28a0388""", """shape""": (480, 640)}, """scores""": 1.0_1_6_7},
								        {"""mask""": {"""hash""": """c0a5f4a318""", """shape""": (480, 640)}, """scores""": 1.0_1_3_2},
								        {"""mask""": {"""hash""": """fe8065c197""", """shape""": (480, 640)}, """scores""": 1.0_0_5_3},
								    ]    ,	)








'''simple docstring'''

import copy

from ...configuration_utils import PretrainedConfig
from ...utils import logging
from ..auto import CONFIG_MAPPING


SCREAMING_SNAKE_CASE__											=     logging.get_logger(__name__)

SCREAMING_SNAKE_CASE__											=     {
    'SenseTime/deformable-detr': 'https://huggingface.co/sensetime/deformable-detr/resolve/main/config.json',
    # See all Deformable DETR models at https://huggingface.co/models?filter=deformable-detr
}






class        a_		(    lowerCamelCase       ):
  lowercase  	=   """deformable_detr"""
  lowercase  	=   {
      """hidden_size""": """d_model""",
      """num_attention_heads""": """encoder_attention_heads""",
  }

  def __init__(   self    ,	_SCREAMING_SNAKE_CASE=True    ,	_SCREAMING_SNAKE_CASE=None    ,	_SCREAMING_SNAKE_CASE=3    ,	_SCREAMING_SNAKE_CASE=300    ,	_SCREAMING_SNAKE_CASE=1024    ,	_SCREAMING_SNAKE_CASE=6    ,	_SCREAMING_SNAKE_CASE=1024    ,	_SCREAMING_SNAKE_CASE=8    ,	_SCREAMING_SNAKE_CASE=6    ,	_SCREAMING_SNAKE_CASE=1024    ,	_SCREAMING_SNAKE_CASE=8    ,	_SCREAMING_SNAKE_CASE=0.0    ,	_SCREAMING_SNAKE_CASE=True    ,	_SCREAMING_SNAKE_CASE="relu"    ,	_SCREAMING_SNAKE_CASE=256    ,	_SCREAMING_SNAKE_CASE=0.1    ,	_SCREAMING_SNAKE_CASE=0.0    ,	_SCREAMING_SNAKE_CASE=0.0    ,	_SCREAMING_SNAKE_CASE=0.0_2    ,	_SCREAMING_SNAKE_CASE=1.0    ,	_SCREAMING_SNAKE_CASE=True    ,	_SCREAMING_SNAKE_CASE=False    ,	_SCREAMING_SNAKE_CASE="sine"    ,	_SCREAMING_SNAKE_CASE="resnet50"    ,	_SCREAMING_SNAKE_CASE=True    ,	_SCREAMING_SNAKE_CASE=False    ,	_SCREAMING_SNAKE_CASE=4    ,	_SCREAMING_SNAKE_CASE=4    ,	_SCREAMING_SNAKE_CASE=4    ,	_SCREAMING_SNAKE_CASE=False    ,	_SCREAMING_SNAKE_CASE=300    ,	_SCREAMING_SNAKE_CASE=False    ,	_SCREAMING_SNAKE_CASE=1    ,	_SCREAMING_SNAKE_CASE=5    ,	_SCREAMING_SNAKE_CASE=2    ,	_SCREAMING_SNAKE_CASE=1    ,	_SCREAMING_SNAKE_CASE=1    ,	_SCREAMING_SNAKE_CASE=5    ,	_SCREAMING_SNAKE_CASE=2    ,	_SCREAMING_SNAKE_CASE=0.1    ,	_SCREAMING_SNAKE_CASE=0.2_5    ,	_SCREAMING_SNAKE_CASE=False    ,	**_SCREAMING_SNAKE_CASE    ,	)						->   List[str]:



        """simple docstring"""






        if backbone_config is not None and use_timm_backbone:
              raise ValueError("""You can't specify both `backbone_config` and `use_timm_backbone`."""   )

        if not use_timm_backbone:
              if backbone_config is None:
                    logger.info("""`backbone_config` is `None`. Initializing the config with the default `ResNet` backbone."""   )
                    UpperCamelCase       						=      CONFIG_MAPPING["""resnet"""](out_features=["""stage4"""]   )
              elif isinstance(_SCREAMING_SNAKE_CASE    ,	_SCREAMING_SNAKE_CASE   ):
                    UpperCamelCase       						=      backbone_config.get("""model_type"""   )
                    UpperCamelCase       						=      CONFIG_MAPPING[backbone_model_type]
                    UpperCamelCase       						=      config_class.from_dict(_SCREAMING_SNAKE_CASE   )
        UpperCamelCase       						=      use_timm_backbone
        UpperCamelCase       						=      backbone_config
        UpperCamelCase       						=      num_channels
        UpperCamelCase       						=      num_queries
        UpperCamelCase       						=      max_position_embeddings
        UpperCamelCase       						=      d_model
        UpperCamelCase       						=      encoder_ffn_dim
        UpperCamelCase       						=      encoder_layers
        UpperCamelCase       						=      encoder_attention_heads
        UpperCamelCase       						=      decoder_ffn_dim
        UpperCamelCase       						=      decoder_layers
        UpperCamelCase       						=      decoder_attention_heads
        UpperCamelCase       						=      dropout
        UpperCamelCase       						=      attention_dropout
        UpperCamelCase       						=      activation_dropout
        UpperCamelCase       						=      activation_function
        UpperCamelCase       						=      init_std
        UpperCamelCase       						=      init_xavier_std
        UpperCamelCase       						=      encoder_layerdrop
        UpperCamelCase       						=      auxiliary_loss
        UpperCamelCase       						=      position_embedding_type
        UpperCamelCase       						=      backbone
        UpperCamelCase       						=      use_pretrained_backbone
        UpperCamelCase       						=      dilation
        # deformable attributes
        UpperCamelCase       						=      num_feature_levels
        UpperCamelCase       						=      encoder_n_points
        UpperCamelCase       						=      decoder_n_points
        UpperCamelCase       						=      two_stage
        UpperCamelCase       						=      two_stage_num_proposals
        UpperCamelCase       						=      with_box_refine
        if two_stage is True and with_box_refine is False:
              raise ValueError("""If two_stage is True, with_box_refine must be True."""   )
        # Hungarian matcher
        UpperCamelCase       						=      class_cost
        UpperCamelCase       						=      bbox_cost
        UpperCamelCase       						=      giou_cost
        # Loss coefficients
        UpperCamelCase       						=      mask_loss_coefficient
        UpperCamelCase       						=      dice_loss_coefficient
        UpperCamelCase       						=      bbox_loss_coefficient
        UpperCamelCase       						=      giou_loss_coefficient
        UpperCamelCase       						=      eos_coefficient
        UpperCamelCase       						=      focal_alpha
        UpperCamelCase       						=      disable_custom_kernels
        super().__init__(is_encoder_decoder=_SCREAMING_SNAKE_CASE    ,	**_SCREAMING_SNAKE_CASE   )

  @property
  def 						A__		(   self   )						->   int:



        """simple docstring"""






        return self.encoder_attention_heads

  @property
  def 						A__		(   self   )						->   int:



        """simple docstring"""






        return self.d_model


  def 						A__		(   self   )						->   Tuple:



        """simple docstring"""






        UpperCamelCase       						=      copy.deepcopy(self.__dict__   )
        if self.backbone_config is not None:
              UpperCamelCase       						=      self.backbone_config.to_dict()
        UpperCamelCase       						=      self.__class__.model_type
        return output
