




from typing import Dict, List, Optional, Union

import numpy as np

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


if is_vision_available():
	import PIL


__A						:		Dict          =						logging.get_logger(__name__)

class 		lowercase_       (	lowerCAmelCase__				):
					__UpperCamelCase     	= ["pixel_values"]




					def __init__(   self:		str,     _lowercase:		bool = True,     _lowercase:		Dict[str, int] = None,     _lowercase:		PILImageResampling = PIL.Image.NEAREST,     _lowercase:		bool = False,     _lowercase:		Dict[str, int] = None,     _lowercase:		Union[int, float] = 1 / 255,     _lowercase:		bool = False,     _lowercase:		bool = True,     _lowercase:		bool = True,     _lowercase:		Optional[Union[float, List[float]]] = None,     _lowercase:		Optional[Union[float, List[float]]] = None,     _lowercase:		bool = True,     **_lowercase:		Union[str, Any],     ):


									'''simple docstring'''


									super().__init__(**_lowercase)
									__lowerCAmelCase					=  size if size is not None else {"""height""": 346, """width""": 346}
									__lowerCAmelCase					=  get_size_dict(_lowercase)
									__lowerCAmelCase					=  crop_size if crop_size is not None else {"""height""": 289, """width""": 289}
									__lowerCAmelCase					=  get_size_dict(_lowercase,     param_name="""crop_size""")

									__lowerCAmelCase					=  do_resize
									__lowerCAmelCase					=  size
									__lowerCAmelCase					=  resample
									__lowerCAmelCase					=  do_center_crop
									__lowerCAmelCase					=  crop_size
									__lowerCAmelCase					=  do_rescale
									__lowerCAmelCase					=  rescale_factor
									__lowerCAmelCase					=  rescale_offset
									__lowerCAmelCase					=  do_normalize
									__lowerCAmelCase					=  image_mean if image_mean is not None else IMAGENET_STANDARD_MEAN
									__lowerCAmelCase					=  image_std if image_std is not None else IMAGENET_STANDARD_STD
									__lowerCAmelCase					=  include_top




					def     _lowercase						(   self:		Optional[Any],     _lowercase:		np.ndarray,     _lowercase:		Dict[str, int],     _lowercase:		PILImageResampling = PIL.Image.NEAREST,     _lowercase:		Optional[Union[str, ChannelDimension]] = None,     **_lowercase:		Dict,     ):


									'''simple docstring'''


									__lowerCAmelCase					=  get_size_dict(_lowercase)
									if "height" not in size or "width" not in size:
													raise ValueError(f'''The size dictionary must have keys \'height\' and \'width\'. Got {size.keys()}''')
									return resize(
									    _lowercase,     size=(size["""height"""], size["""width"""]),     resample=_lowercase,     data_format=_lowercase,     **_lowercase)




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


									'''simple docstring'''


									__lowerCAmelCase					=  get_size_dict(_lowercase)
									if "height" not in size or "width" not in size:
													raise ValueError(f'''The size dictionary must have keys \'height\' and \'width\'. Got {size.keys()}''')
									return center_crop(_lowercase,     size=(size["""height"""], size["""width"""]),     data_format=_lowercase,     **_lowercase)




					def     _lowercase						(   self:		Union[str, Any],     _lowercase:		np.ndarray,     _lowercase:		Union[int, float],     _lowercase:		bool = True,     _lowercase:		Optional[Union[str, ChannelDimension]] = None,     **_lowercase:		Dict,     ):


									'''simple docstring'''


									if offset:
													__lowerCAmelCase					=  (image - 127.5) * scale
													if data_format is not None:
																	__lowerCAmelCase					=  to_channel_dimension_format(_lowercase,     _lowercase)
													__lowerCAmelCase					=  rescaled_image.astype(np.floataa)
									else:
													__lowerCAmelCase					=  rescale(_lowercase,     scale=_lowercase,     data_format=_lowercase,     **_lowercase)
									return rescaled_image




					def     _lowercase						(   self:		Dict,     _lowercase:		np.ndarray,     _lowercase:		Union[float, List[float]],     _lowercase:		Union[float, List[float]],     _lowercase:		Optional[Union[str, ChannelDimension]] = None,     **_lowercase:		Any,     ):


									'''simple docstring'''


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







					def     _lowercase						(   self:		Dict,     _lowercase:		ImageInput,     _lowercase:		bool = None,     _lowercase:		Dict[str, int] = None,     _lowercase:		str=None,     _lowercase:		bool = None,     _lowercase:		Dict[str, int] = None,     _lowercase:		bool = None,     _lowercase:		float = None,     _lowercase:		bool = None,     _lowercase:		bool = None,     _lowercase:		Optional[Union[float, List[float]]] = None,     _lowercase:		Optional[Union[float, List[float]]] = None,     _lowercase:		bool = None,     _lowercase:		Optional[Union[str, TensorType]] = None,     _lowercase:		ChannelDimension = ChannelDimension.FIRST,     **_lowercase:		Tuple,     ):


									'''simple docstring'''


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

									__lowerCAmelCase					=  size if size is not None else self.size
									__lowerCAmelCase					=  get_size_dict(_lowercase)
									__lowerCAmelCase					=  crop_size if crop_size is not None else self.crop_size
									__lowerCAmelCase					=  get_size_dict(_lowercase,     param_name="""crop_size""")

									__lowerCAmelCase					=  make_list_of_images(_lowercase)

									if not valid_images(_lowercase):
													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 or resample is None:
													raise ValueError("""Size and resample 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.
									__lowerCAmelCase					=  [to_numpy_array(_lowercase) for image in images]

									if do_resize:
													__lowerCAmelCase					=  [self.resize(image=_lowercase,     size=_lowercase,     resample=_lowercase) for image in images]

									if do_center_crop:
													__lowerCAmelCase					=  [self.center_crop(image=_lowercase,     size=_lowercase) for image in images]

									if do_rescale:
													__lowerCAmelCase					=  [self.rescale(image=_lowercase,     scale=_lowercase,     offset=_lowercase) for image in images]

									if do_normalize:
													__lowerCAmelCase					=  [self.normalize(image=_lowercase,     mean=_lowercase,     std=_lowercase) for image in images]

									if include_top:
													__lowerCAmelCase					=  [self.normalize(image=_lowercase,     mean=[0, 0, 0],     std=_lowercase) for image in images]

									__lowerCAmelCase					=  [to_channel_dimension_format(_lowercase,     _lowercase) for image in images]

									__lowerCAmelCase					=  {"""pixel_values""": images}
									return BatchFeature(data=_lowercase,     tensor_type=_lowercase)









import math
from collections import OrderedDict

import torch
from packaging import version
from torch import Tensor, nn

from .utils import logging


_A		:					Optional[int]          =							logging.get_logger(__name__)



class 							a       (      nn.Module ):





     def __init__(     self       :					Dict				):
        super().__init__()
        if version.parse(torch.__version__				) < version.parse("""1.12.0"""				):
           raise ImportError(
               F'You are using torch=={torch.__version__}, but torch>=1.12.0 is required to use '
               """PytorchGELUTanh. Please upgrade torch."""				)







     def 			SCREAMING_SNAKE_CASE__							(     self       :					int     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return nn.functional.gelu(SCREAMING_SNAKE_CASE_     ,						approximate="""tanh"""				)



class 							a       (      nn.Module ):





     def 			SCREAMING_SNAKE_CASE__							(     self       :					Any     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return 0.5 * input * (1.0 + torch.tanh(math.sqrt(2.0 / math.pi				) * (input + 0.04_4715 * torch.pow(SCREAMING_SNAKE_CASE_     ,						3.0				))				))



class 							a       (      nn.Module ):





     def __init__(     self       :					List[Any]     ,						SCREAMING_SNAKE_CASE_       :					bool = False				):
        super().__init__()
        if use_gelu_python:
           __lowerCamelCase:					Union[str, Any]	 =						self._gelu_python
        else:
           __lowerCamelCase:					Tuple	 =						nn.functional.gelu





     def 			SCREAMING_SNAKE_CASE__							(     self       :					str     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return input * 0.5 * (1.0 + torch.erf(input / math.sqrt(2.0				)				))







     def 			SCREAMING_SNAKE_CASE__							(     self       :					Union[str, Any]     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return self.act(SCREAMING_SNAKE_CASE_				)



class 							a       (      nn.Module ):





     def 			SCREAMING_SNAKE_CASE__							(     self       :					List[str]     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return 0.5 * input * (1.0 + torch.tanh(input * 0.79_7884_5608 * (1.0 + 0.04_4715 * input * input)				))



class 							a       (      nn.Module ):





     def 			SCREAMING_SNAKE_CASE__							(     self       :					List[Any]     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return input * torch.sigmoid(1.702 * input				)



class 							a       (      nn.Module ):





     def __init__(     self       :					List[str]     ,						SCREAMING_SNAKE_CASE_       :					float     ,						SCREAMING_SNAKE_CASE_       :					float				):
        if min > max:
           raise ValueError(F'min should be < max (got min: {min}, max: {max})'				)

        super().__init__()
        __lowerCamelCase:					Optional[int]	 =						min
        __lowerCamelCase:					str	 =						max







     def 			SCREAMING_SNAKE_CASE__							(     self       :					List[str]     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return torch.clip(gelu(SCREAMING_SNAKE_CASE_				)     ,						self.min     ,						self.max				)



class 							a       (      nn.Module ):





     def __init__(     self       :					int				):
        super().__init__()
        __lowerCamelCase:					List[str]	 =						math.sqrt(2 / math.pi				)







     def 			SCREAMING_SNAKE_CASE__							(     self       :					Tuple     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return 0.5 * input * (1 + torch.tanh(self.precomputed_constant * (input + 0.04_4715 * torch.pow(SCREAMING_SNAKE_CASE_     ,						3				))				))



class 							a       (      nn.Module ):





     def 			SCREAMING_SNAKE_CASE__							(     self       :					Any     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return nn.functional.silu(SCREAMING_SNAKE_CASE_				)



class 							a       (      nn.Module ):





     def __init__(     self       :					Any				):
        super().__init__()
        if version.parse(torch.__version__				) < version.parse("""1.9.0"""				):
           __lowerCamelCase:					str	 =						self._mish_python
        else:
           __lowerCamelCase:					Any	 =						nn.functional.mish





     def 			SCREAMING_SNAKE_CASE__							(     self       :					int     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return input * torch.tanh(nn.functional.softplus(SCREAMING_SNAKE_CASE_				)				)







     def 			SCREAMING_SNAKE_CASE__							(     self       :					List[str]     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return self.act(SCREAMING_SNAKE_CASE_				)



class 							a       (      nn.Module ):





     def 			SCREAMING_SNAKE_CASE__							(     self       :					List[str]     ,						SCREAMING_SNAKE_CASE_       :					Tensor				):
        return input



class 							a       (      nn.Module ):





     def 			SCREAMING_SNAKE_CASE__							(     self       :					Optional[int]     ,						SCREAMING_SNAKE_CASE_       :					str     ,						SCREAMING_SNAKE_CASE_       :					Optional[int]=0.70_7107     ,						SCREAMING_SNAKE_CASE_       :					Tuple=0.28_2095				):
        __lowerCamelCase:					Optional[Any]	 =						(input - mu).div(sigma * math.sqrt(2.0				)				)
        return 0.5 * (1.0 + torch.erf(SCREAMING_SNAKE_CASE_				))



class 							a       (      nn.Module ):





     def 			SCREAMING_SNAKE_CASE__							(     self       :					int     ,						SCREAMING_SNAKE_CASE_       :					str				):
        __lowerCamelCase:					Any	 =						nn.functional.relu(SCREAMING_SNAKE_CASE_				)
        __lowerCamelCase:					List[str]	 =						torch.square(SCREAMING_SNAKE_CASE_				)
        return squared



class 							a       (      _UpperCAmelCase ):





     def __getitem__(     self       :					str     ,						SCREAMING_SNAKE_CASE_       :					Tuple				):
        __lowerCamelCase:					Optional[Any]	 =						super().__getitem__(SCREAMING_SNAKE_CASE_				)
        __lowerCamelCase ,  __lowerCamelCase:					Optional[Any]	 =						content if isinstance(SCREAMING_SNAKE_CASE_     ,						SCREAMING_SNAKE_CASE_				) else (content, {})
        return cls(**SCREAMING_SNAKE_CASE_				)



_A		:					Optional[Any]          =							{
    '''gelu''': GELUActivation,
    '''gelu_10''': (ClippedGELUActivation, {'''min''': -10, '''max''': 10}),
    '''gelu_fast''': FastGELUActivation,
    '''gelu_new''': NewGELUActivation,
    '''gelu_python''': (GELUActivation, {'''use_gelu_python''': True}),
    '''gelu_pytorch_tanh''': PytorchGELUTanh,
    '''gelu_accurate''': AccurateGELUActivation,
    '''laplace''': LaplaceActivation,
    '''linear''': LinearActivation,
    '''mish''': MishActivation,
    '''quick_gelu''': QuickGELUActivation,
    '''relu''': nn.ReLU,
    '''relu2''': ReLUSquaredActivation,
    '''relu6''': nn.ReLUa,
    '''sigmoid''': nn.Sigmoid,
    '''silu''': SiLUActivation,
    '''swish''': SiLUActivation,
    '''tanh''': nn.Tanh,
}
_A		:					Optional[int]          =							ClassInstantier(ACTaCLS)



def      __lowerCAmelCase    (				snake_case						:     Any			)							->				int:
   if activation_string in ACTaFN:
      return ACTaFN[activation_string]
   else:
      raise KeyError(f'function {activation_string} not found in ACT2FN mapping {list(ACTaFN.keys()			)}'			)


# For backwards compatibility with: from activations import gelu_python
_A		:					Optional[int]          =							get_activation('''gelu_python''')
_A		:					Dict          =							get_activation('''gelu_new''')
_A		:					List[str]          =							get_activation('''gelu''')
_A		:					Tuple          =							get_activation('''gelu_fast''')
_A		:					int          =							get_activation('''quick_gelu''')
_A		:					Tuple          =							get_activation('''silu''')
_A		:					Optional[Any]          =							get_activation('''mish''')







_A		:					Dict          =							get_activation('''linear''')


