


import copy

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


a					  =     logging.get_logger(__name__)

a					  =     {
    'ut/deta': 'https://huggingface.co/ut/deta/resolve/main/config.json',
}







class        UpperCamelCase__   (	__magic_name__   ):
     __SCREAMING_SNAKE_CASE       :  Optional[int]						=   'deta'
     __SCREAMING_SNAKE_CASE       :  str						=   {
         'hidden_size': 'd_model',
         'num_attention_heads': 'encoder_attention_heads',
     }

     def __init__(     self       :   Union[str, Any]							,					UpperCamelCase__       :   int=None							,					UpperCamelCase__       :   str=900							,					UpperCamelCase__       :   int=2_048							,					UpperCamelCase__       :   List[str]=6							,					UpperCamelCase__       :   Dict=2_048							,					UpperCamelCase__       :   Dict=8							,					UpperCamelCase__       :   str=6							,					UpperCamelCase__       :   Optional[Any]=1_024							,					UpperCamelCase__       :   Tuple=8							,					UpperCamelCase__       :   Tuple=0.0							,					UpperCamelCase__       :   Dict=True							,					UpperCamelCase__       :   str="relu"							,					UpperCamelCase__       :   Any=256							,					UpperCamelCase__       :   List[Any]=0.1							,					UpperCamelCase__       :   Tuple=0.0							,					UpperCamelCase__       :   Dict=0.0							,					UpperCamelCase__       :   List[str]=0.02							,					UpperCamelCase__       :   int=1.0							,					UpperCamelCase__       :   Dict=True							,					UpperCamelCase__       :   Optional[Any]=False							,					UpperCamelCase__       :   Any="sine"							,					UpperCamelCase__       :   Dict=5							,					UpperCamelCase__       :   Tuple=4							,					UpperCamelCase__       :   Union[str, Any]=4							,					UpperCamelCase__       :   List[str]=True							,					UpperCamelCase__       :   List[str]=300							,					UpperCamelCase__       :   Optional[int]=True							,					UpperCamelCase__       :   List[str]=True							,					UpperCamelCase__       :   str=1							,					UpperCamelCase__       :   int=5							,					UpperCamelCase__       :   str=2							,					UpperCamelCase__       :   Dict=1							,					UpperCamelCase__       :   Tuple=1							,					UpperCamelCase__       :   Optional[Any]=5							,					UpperCamelCase__       :   int=2							,					UpperCamelCase__       :   Optional[Any]=0.1							,					UpperCamelCase__       :   int=0.25							,					**UpperCamelCase__       :   Tuple							,					):






          '''simple docstring'''






          if backbone_config is None:
               logger.info("""`backbone_config` is `None`. Initializing the config with the default `ResNet` backbone."""       )
               lowercase_  							=			CONFIG_MAPPING["""resnet"""](out_features=["""stage2""", """stage3""", """stage4"""]       )
          else:
               if isinstance(UpperCamelCase__							,					UpperCamelCase__       ):
                    lowercase_  							=			backbone_config.pop("""model_type"""       )
                    lowercase_  							=			CONFIG_MAPPING[backbone_model_type]
                    lowercase_  							=			config_class.from_dict(UpperCamelCase__       )

          lowercase_  							=			backbone_config
          lowercase_  							=			num_queries
          lowercase_  							=			max_position_embeddings
          lowercase_  							=			d_model
          lowercase_  							=			encoder_ffn_dim
          lowercase_  							=			encoder_layers
          lowercase_  							=			encoder_attention_heads
          lowercase_  							=			decoder_ffn_dim
          lowercase_  							=			decoder_layers
          lowercase_  							=			decoder_attention_heads
          lowercase_  							=			dropout
          lowercase_  							=			attention_dropout
          lowercase_  							=			activation_dropout
          lowercase_  							=			activation_function
          lowercase_  							=			init_std
          lowercase_  							=			init_xavier_std
          lowercase_  							=			encoder_layerdrop
          lowercase_  							=			auxiliary_loss
          lowercase_  							=			position_embedding_type
          # deformable attributes
          lowercase_  							=			num_feature_levels
          lowercase_  							=			encoder_n_points
          lowercase_  							=			decoder_n_points
          lowercase_  							=			two_stage
          lowercase_  							=			two_stage_num_proposals
          lowercase_  							=			with_box_refine
          lowercase_  							=			assign_first_stage
          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
          lowercase_  							=			class_cost
          lowercase_  							=			bbox_cost
          lowercase_  							=			giou_cost
          # Loss coefficients
          lowercase_  							=			mask_loss_coefficient
          lowercase_  							=			dice_loss_coefficient
          lowercase_  							=			bbox_loss_coefficient
          lowercase_  							=			giou_loss_coefficient
          lowercase_  							=			eos_coefficient
          lowercase_  							=			focal_alpha
          super().__init__(is_encoder_decoder=UpperCamelCase__							,					**UpperCamelCase__       )

     @property
     def   UpperCAmelCase__       (     self       :   int       ):






          '''simple docstring'''






          return self.encoder_attention_heads

     @property
     def   UpperCAmelCase__       (     self       :   str       ):






          '''simple docstring'''






          return self.d_model







     def   UpperCAmelCase__       (     self       :   Union[str, Any]       ):






          '''simple docstring'''






          lowercase_  							=			copy.deepcopy(self.__dict__       )
          lowercase_  							=			self.backbone_config.to_dict()
          lowercase_  							=			self.__class__.model_type
          return output






from typing import Dict, Iterable, List, Optional, Union

import numpy as np

from ...image_processing_utils import BaseImageProcessor, BatchFeature, get_size_dict
from ...image_transforms import (
    center_crop,
    get_resize_output_image_size,
    normalize,
    rescale,
    resize,
    to_channel_dimension_format,
)
from ...image_utils import (
    IMAGENET_DEFAULT_MEAN,
    IMAGENET_DEFAULT_STD,
    ChannelDimension,
    ImageInput,
    PILImageResampling,
    make_list_of_images,
    to_numpy_array,
    valid_images,
)
from ...utils import TensorType, logging


a					  =     logging.get_logger(__name__)







class        UpperCamelCase__   (	__magic_name__   ):
					__SCREAMING_SNAKE_CASE       :  List[Any]						=   ['pixel_values']

					def __init__(     self       :   List[str]							,					UpperCamelCase__       :   bool = True							,					UpperCamelCase__       :   Dict[str, int] = None							,					UpperCamelCase__       :   PILImageResampling = PILImageResampling.BICUBIC							,					UpperCamelCase__       :   bool = True							,					UpperCamelCase__       :   Dict[str, int] = None							,					UpperCamelCase__       :   bool = True							,					UpperCamelCase__       :   Union[int, float] = 1 / 255							,					UpperCamelCase__       :   bool = True							,					UpperCamelCase__       :   Optional[Union[float, Iterable[float]]] = IMAGENET_DEFAULT_MEAN							,					UpperCamelCase__       :   Optional[Union[float, Iterable[float]]] = IMAGENET_DEFAULT_STD							,					**UpperCamelCase__       :   Dict							,					):






										'''simple docstring'''






										super().__init__(**UpperCamelCase__       )
										lowercase_  							=			size if size is not None else {"""shortest_edge""": 224}
										lowercase_  							=			get_size_dict(UpperCamelCase__							,					default_to_square=UpperCamelCase__       )
										lowercase_  							=			crop_size if crop_size is not None else {"""height""": 224, """width""": 224}
										lowercase_  							=			get_size_dict(UpperCamelCase__							,					param_name="""crop_size"""       )

										lowercase_  							=			do_resize
										lowercase_  							=			size
										lowercase_  							=			resample
										lowercase_  							=			do_center_crop
										lowercase_  							=			crop_size
										lowercase_  							=			do_rescale
										lowercase_  							=			rescale_factor
										lowercase_  							=			do_normalize
										lowercase_  							=			image_mean if image_mean is not None else IMAGENET_DEFAULT_MEAN
										lowercase_  							=			image_std if image_std is not None else IMAGENET_DEFAULT_STD

					def   UpperCAmelCase__       (     self       :   int							,					UpperCamelCase__       :   np.ndarray							,					UpperCamelCase__       :   Dict[str, int]							,					UpperCamelCase__       :   PILImageResampling = PILImageResampling.BICUBIC							,					UpperCamelCase__       :   Optional[Union[str, ChannelDimension]] = None							,					**UpperCamelCase__       :   Optional[int]							,					):






										'''simple docstring'''






										lowercase_  							=			get_size_dict(UpperCamelCase__							,					default_to_square=UpperCamelCase__       )
										# size_dict is a dict with either keys "height" and "width" or "shortest_edge"
										if "shortest_edge" in size:
															lowercase_  							=			int((256 / 224) * size["""shortest_edge"""]       )
															lowercase_  							=			get_resize_output_image_size(UpperCamelCase__							,					size=UpperCamelCase__							,					default_to_square=UpperCamelCase__       )
															lowercase_  							=			{"""height""": output_size[0], """width""": output_size[1]}
										if "height" not in size_dict or "width" not in size_dict:
															raise ValueError(
															    F'''Size dict must have keys \'height\' and \'width\' or \'shortest_edge\'. Got {size_dict.keys()}'''       )
										return resize(
										    UpperCamelCase__							,					size=(size_dict["""height"""], size_dict["""width"""])							,					resample=UpperCamelCase__							,					data_format=UpperCamelCase__							,					**UpperCamelCase__       )

					def   UpperCAmelCase__       (     self       :   str							,					UpperCamelCase__       :   np.ndarray							,					UpperCamelCase__       :   Dict[str, int]							,					UpperCamelCase__       :   Optional[Union[str, ChannelDimension]] = None							,					**UpperCamelCase__       :   str							,					):






										'''simple docstring'''






										lowercase_  							=			get_size_dict(UpperCamelCase__       )
										if "height" not in size or "width" not in size:
															raise ValueError(F'''Size dict must have keys \'height\' and \'width\'. Got {size.keys()}'''       )
										return center_crop(UpperCamelCase__							,					size=(size["""height"""], size["""width"""])							,					data_format=UpperCamelCase__							,					**UpperCamelCase__       )

					def   UpperCAmelCase__       (     self       :   Optional[int]							,					UpperCamelCase__       :   np.ndarray							,					UpperCamelCase__       :   Union[int, float]							,					UpperCamelCase__       :   Optional[Union[str, ChannelDimension]] = None							,					**UpperCamelCase__       :   str							,					):






										'''simple docstring'''






										return rescale(UpperCamelCase__							,					scale=UpperCamelCase__							,					data_format=UpperCamelCase__							,					**UpperCamelCase__       )

					def   UpperCAmelCase__       (     self       :   List[str]							,					UpperCamelCase__       :   np.ndarray							,					UpperCamelCase__       :   Union[float, List[float]]							,					UpperCamelCase__       :   Union[float, List[float]]							,					UpperCamelCase__       :   Optional[Union[str, ChannelDimension]] = None							,					**UpperCamelCase__       :   Optional[int]							,					):






										'''simple docstring'''






										return normalize(UpperCamelCase__							,					mean=UpperCamelCase__							,					std=UpperCamelCase__							,					data_format=UpperCamelCase__							,					**UpperCamelCase__       )







					def   UpperCAmelCase__       (     self       :   Dict							,					UpperCamelCase__       :   ImageInput							,					UpperCamelCase__       :   Optional[bool] = None							,					UpperCamelCase__       :   Optional[Dict[str, int]] = None							,					UpperCamelCase__       :   PILImageResampling = None							,					UpperCamelCase__       :   Optional[bool] = None							,					UpperCamelCase__       :   Optional[Dict[str, int]] = None							,					UpperCamelCase__       :   Optional[bool] = None							,					UpperCamelCase__       :   Optional[float] = None							,					UpperCamelCase__       :   Optional[bool] = None							,					UpperCamelCase__       :   Optional[Union[float, Iterable[float]]] = None							,					UpperCamelCase__       :   Optional[Union[float, Iterable[float]]] = None							,					UpperCamelCase__       :   Optional[TensorType] = None							,					UpperCamelCase__       :   ChannelDimension = ChannelDimension.FIRST							,					**UpperCamelCase__       :   Optional[int]							,					):






										'''simple docstring'''






										lowercase_  							=			do_resize if do_resize is not None else self.do_resize
										lowercase_  							=			resample if resample is not None else self.resample
										lowercase_  							=			do_center_crop if do_center_crop is not None else self.do_center_crop
										lowercase_  							=			do_rescale if do_rescale is not None else self.do_rescale
										lowercase_  							=			rescale_factor if rescale_factor is not None else self.rescale_factor
										lowercase_  							=			do_normalize if do_normalize is not None else self.do_normalize
										lowercase_  							=			image_mean if image_mean is not None else self.image_mean
										lowercase_  							=			image_std if image_std is not None else self.image_std

										lowercase_  							=			size if size is not None else self.size
										lowercase_  							=			get_size_dict(UpperCamelCase__							,					default_to_square=UpperCamelCase__       )
										lowercase_  							=			crop_size if crop_size is not None else self.crop_size
										lowercase_  							=			get_size_dict(UpperCamelCase__							,					param_name="""crop_size"""       )

										lowercase_  							=			make_list_of_images(UpperCamelCase__       )

										if not valid_images(UpperCamelCase__       ):
															raise ValueError(
															    """Invalid image type. Must be of type PIL.Image.Image, numpy.ndarray, """
															    """torch.Tensor, tf.Tensor or jax.ndarray."""       )

										if do_resize and size is None:
															raise ValueError("""Size must be specified if do_resize is True."""       )

										if do_center_crop and crop_size is None:
															raise ValueError("""Crop size must be specified if do_center_crop is True."""       )

										if do_rescale and rescale_factor is None:
															raise ValueError("""Rescale factor must be specified if do_rescale is True."""       )

										if do_normalize and (image_mean is None or image_std is None):
															raise ValueError("""Image mean and std must be specified if do_normalize is True."""       )

										# All transformations expect numpy arrays.
										lowercase_  							=			[to_numpy_array(UpperCamelCase__       ) for image in images]

										if do_resize:
															lowercase_  							=			[self.resize(UpperCamelCase__							,					UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										if do_center_crop:
															lowercase_  							=			[self.center_crop(UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										if do_rescale:
															lowercase_  							=			[self.rescale(UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										if do_normalize:
															lowercase_  							=			[self.normalize(UpperCamelCase__							,					UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										lowercase_  							=			[to_channel_dimension_format(UpperCamelCase__							,					UpperCamelCase__       ) for image in images]

										lowercase_  							=			{"""pixel_values""": images}
										return BatchFeature(data=UpperCamelCase__							,					tensor_type=UpperCamelCase__       )


