






from typing import List, Optional

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


lowerCAmelCase_	:    int            =      logging.get_logger(__name__)

lowerCAmelCase_	:    Any            =      {
    '''huggingface/autoformer-tourism-monthly''': '''https://huggingface.co/huggingface/autoformer-tourism-monthly/resolve/main/config.json''',
}





class   UpperCamelCase_ (       a_  ):
  _A       :					int				=	'autoformer'
  _A       :					str				=	{
      'hidden_size': 'd_model',
      'num_attention_heads': 'encoder_attention_heads',
      'num_hidden_layers': 'encoder_layers',
  }



  def __init__(      self ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = "student_t" ,		snake_case__ = "nll" ,		snake_case__ = 1 ,		snake_case__ = [1, 2, 3, 4, 5, 6, 7] ,		snake_case__ = True ,		snake_case__ = 0 ,		snake_case__ = 0 ,		snake_case__ = 0 ,		snake_case__ = 0 ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = 64 ,		snake_case__ = 2 ,		snake_case__ = 2 ,		snake_case__ = 2 ,		snake_case__ = 2 ,		snake_case__ = 32 ,		snake_case__ = 32 ,		snake_case__ = "gelu" ,		snake_case__ = 0.1 ,		snake_case__ = 0.1 ,		snake_case__ = 0.1 ,		snake_case__ = 0.1 ,		snake_case__ = 0.1 ,		snake_case__ = 1_00 ,		snake_case__ = 0.02 ,		snake_case__ = True ,		snake_case__=True ,		snake_case__ = 10 ,		snake_case__ = 25 ,		snake_case__ = 3 ,		**snake_case__ ,		)			->			List[Any]:



         """simple docstring"""





         UpperCAmelCase	    =			prediction_length
         UpperCAmelCase	    =			context_length if context_length is not None else prediction_length
         UpperCAmelCase	    =			distribution_output
         UpperCAmelCase	    =			loss
         UpperCAmelCase	    =			input_size
         UpperCAmelCase	    =			num_time_features
         UpperCAmelCase	    =			lags_sequence
         UpperCAmelCase	    =			scaling
         UpperCAmelCase	    =			num_dynamic_real_features
         UpperCAmelCase	    =			num_static_real_features
         UpperCAmelCase	    =			num_static_categorical_features
         if cardinality is not None and num_static_categorical_features > 0:
                if len(snake_case__				) != num_static_categorical_features:
                       raise ValueError(
                           """The cardinality should be a list of the same length as `num_static_categorical_features`"""				)
                UpperCAmelCase	    =			cardinality
         else:
                UpperCAmelCase	    =			[0]
         if embedding_dimension is not None and num_static_categorical_features > 0:
                if len(snake_case__				) != num_static_categorical_features:
                       raise ValueError(
                           """The embedding dimension should be a list of the same length as `num_static_categorical_features`"""				)
                UpperCAmelCase	    =			embedding_dimension
         else:
                UpperCAmelCase	    =			[min(50 ,		(cat + 1) // 2				) for cat in self.cardinality]
         UpperCAmelCase	    =			num_parallel_samples

         # Transformer architecture configuration
         UpperCAmelCase	    =			input_size * len(self.lags_sequence				) + self._number_of_features
         UpperCAmelCase	    =			d_model
         UpperCAmelCase	    =			encoder_attention_heads
         UpperCAmelCase	    =			decoder_attention_heads
         UpperCAmelCase	    =			encoder_ffn_dim
         UpperCAmelCase	    =			decoder_ffn_dim
         UpperCAmelCase	    =			encoder_layers
         UpperCAmelCase	    =			decoder_layers

         UpperCAmelCase	    =			dropout
         UpperCAmelCase	    =			attention_dropout
         UpperCAmelCase	    =			activation_dropout
         UpperCAmelCase	    =			encoder_layerdrop
         UpperCAmelCase	    =			decoder_layerdrop

         UpperCAmelCase	    =			activation_function
         UpperCAmelCase	    =			init_std

         UpperCAmelCase	    =			use_cache

         # Autoformer
         UpperCAmelCase	    =			label_length
         UpperCAmelCase	    =			moving_average
         UpperCAmelCase	    =			autocorrelation_factor

         super().__init__(is_encoder_decoder=snake_case__ ,		**snake_case__				)



  @property
  def 		UpperCamelCase_				(      self				)			->			int:



         """simple docstring"""





         return (
             sum(self.embedding_dimension				)
             + self.num_dynamic_real_features
             + self.num_time_features
             + self.num_static_real_features
             + self.input_size * 2  # the log1p(abs(loc)) and log(scale) features
         )








"""simple docstring"""







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,
    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, is_vision_available, logging


if is_vision_available():
 import PIL


lowerCAmelCase_	:    Union[str, Any]            =      logging.get_logger(__name__)





class   UpperCamelCase_ (       a_  ):
  _A       :					List[str]				=	['pixel_values']



  def __init__(      self ,		snake_case__ = True ,		snake_case__ = None ,		snake_case__ = 0.9 ,		snake_case__ = PILImageResampling.BICUBIC ,		snake_case__ = True ,		snake_case__ = None ,		snake_case__ = 1 / 2_55 ,		snake_case__ = True ,		snake_case__ = True ,		snake_case__ = None ,		snake_case__ = None ,		**snake_case__ ,		)			->			None:



         """simple docstring"""





         super().__init__(**snake_case__				)
         UpperCAmelCase	    =			size if size is not None else {"""shortest_edge""": 2_24}
         UpperCAmelCase	    =			get_size_dict(snake_case__ ,		default_to_square=snake_case__				)
         UpperCAmelCase	    =			crop_size if crop_size is not None else {"""height""": 2_24, """width""": 2_24}
         UpperCAmelCase	    =			get_size_dict(snake_case__ ,		param_name="""crop_size"""				)

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



  def 		UpperCamelCase_				(      self ,		snake_case__ ,		snake_case__ ,		snake_case__ = None ,		snake_case__ = PILImageResampling.BICUBIC ,		snake_case__ = None ,		**snake_case__ ,		)			->			np.ndarray:



         """simple docstring"""





         UpperCAmelCase	    =			get_size_dict(snake_case__ ,		default_to_square=snake_case__				)
         if "shortest_edge" not in size and ("height" not in size or "width" not in size):
                raise ValueError(f'''size must contain \'height\' and \'width\' or \'shortest_edge\' as keys. Got {size.keys()}'''				)
         if crop_pct is not None:
                if "shortest_edge" in size:
                       UpperCAmelCase	    =			int(size["""shortest_edge"""] / crop_pct				)
                elif "height" in size and "width" in size:
                       if size["height"] == size["width"]:
                              UpperCAmelCase	    =			int(size["""height"""] / crop_pct				)
                       else:
                              UpperCAmelCase	    =			(int(size["""height"""] / crop_pct				), int(size["""width"""] / crop_pct				))
                else:
                       raise ValueError("""Invalid size for resize: {}""".format(snake_case__				)				)

                UpperCAmelCase	    =			get_resize_output_image_size(snake_case__ ,		size=snake_case__ ,		default_to_square=snake_case__				)
         else:
                if "shortest_edge" in size:
                       UpperCAmelCase	    =			get_resize_output_image_size(snake_case__ ,		size=size["""shortest_edge"""] ,		default_to_square=snake_case__				)
                elif "height" in size and "width" in size:
                       UpperCAmelCase	    =			(size["""height"""], size["""width"""])
                else:
                       raise ValueError("""Invalid size for resize: {}""".format(snake_case__				)				)

         return resize(snake_case__ ,		size=snake_case__ ,		resample=snake_case__ ,		data_format=snake_case__ ,		**snake_case__				)



  def 		UpperCamelCase_				(      self ,		snake_case__ ,		snake_case__ ,		snake_case__ = None ,		**snake_case__ ,		)			->			np.ndarray:



         """simple docstring"""





         UpperCAmelCase	    =			get_size_dict(snake_case__				)
         if "height" not in size or "width" not in size:
                raise ValueError(f'''size must contain \'height\' and \'width\' as keys. Got {size.keys()}'''				)
         return center_crop(snake_case__ ,		size=(size["""height"""], size["""width"""]) ,		data_format=snake_case__ ,		**snake_case__				)



  def 		UpperCamelCase_				(      self ,		snake_case__ ,		snake_case__ ,		snake_case__ = None ,		**snake_case__ ,		)			->			Tuple:



         """simple docstring"""





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



  def 		UpperCamelCase_				(      self ,		snake_case__ ,		snake_case__ ,		snake_case__ ,		snake_case__ = None ,		**snake_case__ ,		)			->			np.ndarray:



         """simple docstring"""





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



  def 		UpperCamelCase_				(      self ,		snake_case__ ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = None ,		snake_case__ = ChannelDimension.FIRST ,		**snake_case__ ,		)			->			PIL.Image.Image:



         """simple docstring"""





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

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

         UpperCAmelCase	    =			make_list_of_images(snake_case__				)

         if not valid_images(snake_case__				):
                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_pct is None:
                raise ValueError("""Crop_pct 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.
         UpperCAmelCase	    =			[to_numpy_array(snake_case__				) for image in images]

         if do_resize:
                UpperCAmelCase	    =			[self.resize(image=snake_case__ ,		size=snake_case__ ,		crop_pct=snake_case__ ,		resample=snake_case__				) for image in images]

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

         if do_rescale:
                UpperCAmelCase	    =			[self.rescale(image=snake_case__ ,		scale=snake_case__				) for image in images]

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

         UpperCAmelCase	    =			[to_channel_dimension_format(snake_case__ ,		snake_case__				) for image in images]

         UpperCAmelCase	    =			{"""pixel_values""": images}
         return BatchFeature(data=snake_case__ ,		tensor_type=snake_case__				)
