






from typing import List, Optional, Union

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


A							:					List[Any]     						=     logging.get_logger(__name__)

A							:					Union[str, Any]     						=     {
    'huggingface/time-series-transformer-tourism-monthly': (
        'https://huggingface.co/huggingface/time-series-transformer-tourism-monthly/resolve/main/config.json'
    ),
    # See all TimeSeriesTransformer models at https://huggingface.co/models?filter=time_series_transformer
}






class     UpperCamelCase(  _a   ):
					snake_case_		:				str										=	"""time_series_transformer"""
					snake_case_		:				int										=	{
					    """hidden_size""": """d_model""",
					    """num_attention_heads""": """encoder_attention_heads""",
					    """num_hidden_layers""": """encoder_layers""",
					}


					def __init__(						self	:		List[Any]     ,    SCREAMING_SNAKE_CASE	:		Optional[int] = None     ,    SCREAMING_SNAKE_CASE	:		Optional[int] = None     ,    SCREAMING_SNAKE_CASE	:		str = "student_t"     ,    SCREAMING_SNAKE_CASE	:		str = "nll"     ,    SCREAMING_SNAKE_CASE	:		int = 1     ,    SCREAMING_SNAKE_CASE	:		List[int] = [1, 2, 3, 4, 5, 6, 7]     ,    SCREAMING_SNAKE_CASE	:		Optional[Union[str, bool]] = "mean"     ,    SCREAMING_SNAKE_CASE	:		int = 0     ,    SCREAMING_SNAKE_CASE	:		int = 0     ,    SCREAMING_SNAKE_CASE	:		int = 0     ,    SCREAMING_SNAKE_CASE	:		int = 0     ,    SCREAMING_SNAKE_CASE	:		Optional[List[int]] = None     ,    SCREAMING_SNAKE_CASE	:		Optional[List[int]] = None     ,    SCREAMING_SNAKE_CASE	:		int = 3_2     ,    SCREAMING_SNAKE_CASE	:		int = 3_2     ,    SCREAMING_SNAKE_CASE	:		int = 2     ,    SCREAMING_SNAKE_CASE	:		int = 2     ,    SCREAMING_SNAKE_CASE	:		int = 2     ,    SCREAMING_SNAKE_CASE	:		int = 2     ,    SCREAMING_SNAKE_CASE	:		bool = True     ,    SCREAMING_SNAKE_CASE	:		str = "gelu"     ,    SCREAMING_SNAKE_CASE	:		int = 6_4     ,    SCREAMING_SNAKE_CASE	:		float = 0.1     ,    SCREAMING_SNAKE_CASE	:		float = 0.1     ,    SCREAMING_SNAKE_CASE	:		float = 0.1     ,    SCREAMING_SNAKE_CASE	:		float = 0.1     ,    SCREAMING_SNAKE_CASE	:		float = 0.1     ,    SCREAMING_SNAKE_CASE	:		int = 1_0_0     ,    SCREAMING_SNAKE_CASE	:		float = 0.02     ,    SCREAMING_SNAKE_CASE	:		Dict=True     ,    **SCREAMING_SNAKE_CASE	:		str     ,    )			->	str:




											'''simple docstring'''

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

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

											__snake_case				=		dropout
											__snake_case				=		attention_dropout
											__snake_case				=		activation_dropout
											__snake_case				=		encoder_layerdrop
											__snake_case				=		decoder_layerdrop

											__snake_case				=		activation_function
											__snake_case				=		init_std

											__snake_case				=		use_cache

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






					@property
					def 							SCREAMING_SNAKE_CASE_  (						self	:		Optional[Any]						)			->	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
											)









def 	_lowerCAmelCase       (    _lowerCAmelCase )						->	int:


						'''simple docstring'''






						__snake_case				=		abs(_lowerCAmelCase )
						__snake_case				=		0
						while n > 0:
												res += n % 10
												n //= 10
						return res





def 	_lowerCAmelCase       (    _lowerCAmelCase )						->	int:


						'''simple docstring'''






						__snake_case				=		abs(_lowerCAmelCase )
						return n if n < 10 else n % 10 + sum_of_digits(n // 10 )





def 	_lowerCAmelCase       (    _lowerCAmelCase )						->	int:


						'''simple docstring'''






						return sum(int(_lowerCAmelCase ) for c in str(abs(_lowerCAmelCase ) ) )





def 	_lowerCAmelCase       (    )						->	None:


						'''simple docstring'''






						from collections.abc import Callable
						from timeit import timeit

						def benchmark_a_function(_lowerCAmelCase      ,	_lowerCAmelCase ) -> None:
												__snake_case				=		F'''{func.__name__}({value})'''
												__snake_case				=		timeit(F'''__main__.{call}'''      ,	setup="import __main__" )
												print(F'''{call:56} = {func(_lowerCAmelCase )} -- {timing:.4f} seconds''' )

						for value in (26_2144, 1125_8999_0684_2624, 126_7650_6002_2822_9401_4967_0320_5376):
												for func in (sum_of_digits, sum_of_digits_recursion, sum_of_digits_compact):
																		benchmark_a_function(_lowerCAmelCase      ,	_lowerCAmelCase )
												print()


if __name__ == "__main__":
	import doctest

	doctest.testmod()
	benchmark()





