






"""simple docstring"""
import time
from contextlib import contextmanager
from pathlib import Path

import pytest
import requests
from huggingface_hub.hf_api import HfApi, HfFolder


lowerCamelCase_							      = '''__DUMMY_TRANSFORMERS_USER__'''
lowerCamelCase_							      = '''Dummy User'''
lowerCamelCase_							      = '''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'''

lowerCamelCase_							      = '''https://hub-ci.huggingface.co'''
lowerCamelCase_							      = CI_HUB_ENDPOINT + '''/datasets/{repo_id}/resolve/{revision}/{path}'''
lowerCamelCase_							      = CI_HUB_ENDPOINT + '''/{repo_id}/resolve/{revision}/{filename}'''
lowerCamelCase_							      = Path('''~/.huggingface/hub_ci_token''').expanduser()

@pytest.fixture
def 							snake_case (  A__		):
			monkeypatch.setattr(
			    "huggingface_hub.file_download.HUGGINGFACE_CO_URL_TEMPLATE"      ,A__		)

@pytest.fixture
def 							snake_case (  A__		):
			monkeypatch.setattr("datasets.config.HF_ENDPOINT"      ,A__		)
			monkeypatch.setattr("datasets.config.HUB_DATASETS_URL"      ,A__		)

@pytest.fixture
def 							snake_case (  A__		):
			monkeypatch.setattr("huggingface_hub.hf_api.HfFolder.path_token"      ,A__		)

@pytest.fixture
def 							snake_case (  A__      ,A__		):
			HfFolder.save_token(A__		)
			yield
			HfFolder.delete_token()

@pytest.fixture(scope="session"		)
def 							snake_case (  ):
			return HfApi(endpoint=A__		)

@pytest.fixture(scope="session"		)
def 							snake_case (  A__		):
			UpperCAmelCase_	:					Optional[Any]     	=   HfFolder.get_token()
			HfFolder.save_token(A__		)
			yield CI_HUB_USER_TOKEN
			if previous_token is not None:
						HfFolder.save_token(A__		)

@pytest.fixture
def 							snake_case (  A__		):
			def _cleanup_repo(A__		):
						hf_api.delete_repo(A__      ,token=A__      ,repo_type="dataset"		)

			return _cleanup_repo

@pytest.fixture
def 							snake_case (  A__		):
			@contextmanager
			def _temporary_repo(A__		):
						try:
									yield repo_id
						finally:
									cleanup_repo(A__		)

			return _temporary_repo

@pytest.fixture(scope="session"		)
def 							snake_case (  A__      ,A__      ,A__		):
			UpperCAmelCase_	:					Tuple     	=   F"""repo_txt_data-{int(time.time() * 10e3		)}"""
			UpperCAmelCase_	:					List[Any]     	=   F"""{CI_HUB_USER}/{repo_name}"""
			hf_api.create_repo(A__      ,token=A__      ,repo_type="dataset"      ,private=A__		)
			hf_api.upload_file(
			    token=A__      ,path_or_fileobj=str(A__		)      ,path_in_repo="data/text_data.txt"      ,repo_id=A__      ,repo_type="dataset"      ,)
			yield repo_id
			try:
						hf_api.delete_repo(A__      ,token=A__      ,repo_type="dataset"		)
			except (requests.exceptions.HTTPError, ValueError):  # catch http error and token invalid error
						pass

@pytest.fixture()
def 							snake_case (  A__      ,A__      ,A__		):
			return hf_private_dataset_repo_txt_data_

@pytest.fixture(scope="session"		)
def 							snake_case (  A__      ,A__      ,A__		):
			UpperCAmelCase_	:					List[Any]     	=   F"""repo_zipped_txt_data-{int(time.time() * 10e3		)}"""
			UpperCAmelCase_	:					int     	=   F"""{CI_HUB_USER}/{repo_name}"""
			hf_api.create_repo(A__      ,token=A__      ,repo_type="dataset"      ,private=A__		)
			hf_api.upload_file(
			    token=A__      ,path_or_fileobj=str(A__		)      ,path_in_repo="data.zip"      ,repo_id=A__      ,repo_type="dataset"      ,)
			yield repo_id
			try:
						hf_api.delete_repo(A__      ,token=A__      ,repo_type="dataset"		)
			except (requests.exceptions.HTTPError, ValueError):  # catch http error and token invalid error
						pass

@pytest.fixture()
def 							snake_case (  A__      ,A__      ,A__		):
			return hf_private_dataset_repo_zipped_txt_data_

@pytest.fixture(scope="session"		)
def 							snake_case (  A__      ,A__      ,A__		):
			UpperCAmelCase_	:					Any     	=   F"""repo_zipped_img_data-{int(time.time() * 10e3		)}"""
			UpperCAmelCase_	:					Tuple     	=   F"""{CI_HUB_USER}/{repo_name}"""
			hf_api.create_repo(A__      ,token=A__      ,repo_type="dataset"      ,private=A__		)
			hf_api.upload_file(
			    token=A__      ,path_or_fileobj=str(A__		)      ,path_in_repo="data.zip"      ,repo_id=A__      ,repo_type="dataset"      ,)
			yield repo_id
			try:
						hf_api.delete_repo(A__      ,token=A__      ,repo_type="dataset"		)
			except (requests.exceptions.HTTPError, ValueError):  # catch http error and token invalid error
						pass




@pytest.fixture()
def 							snake_case (  A__      ,A__      ,A__		):
			return hf_private_dataset_repo_zipped_img_data_











"""simple docstring"""
from typing import List, Optional, Union

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


lowerCamelCase_							      = logging.get_logger(__name__)

lowerCamelCase_							      = {
    '''huggingface/informer-tourism-monthly''': (
        '''https://huggingface.co/huggingface/informer-tourism-monthly/resolve/main/config.json'''
    ),
    # See all Informer models at https://huggingface.co/models?filter=informer
}







class      UpperCamelCase_			(__A	):
	__magic_name__       =							'''informer'''
	__magic_name__       =							{
	    '''hidden_size''': '''d_model''',
	    '''num_attention_heads''': '''encoder_attention_heads''',
	    '''num_hidden_layers''': '''encoder_layers''',
	}





	def __init__( self   :					Optional[Any]      ,      lowerCAmelCase_   :					Optional[int] = None      ,      lowerCAmelCase_   :					Optional[int] = None      ,      lowerCAmelCase_   :					str = "student_t"      ,      lowerCAmelCase_   :					str = "nll"      ,      lowerCAmelCase_   :					int = 1      ,      lowerCAmelCase_   :					List[int] = None      ,      lowerCAmelCase_   :					Optional[Union[str, bool]] = "mean"      ,      lowerCAmelCase_   :					int = 0      ,      lowerCAmelCase_   :					int = 0      ,      lowerCAmelCase_   :					int = 0      ,      lowerCAmelCase_   :					int = 0      ,      lowerCAmelCase_   :					Optional[List[int]] = None      ,      lowerCAmelCase_   :					Optional[List[int]] = None      ,      lowerCAmelCase_   :					int = 64      ,      lowerCAmelCase_   :					int = 32      ,      lowerCAmelCase_   :					int = 32      ,      lowerCAmelCase_   :					int = 2      ,      lowerCAmelCase_   :					int = 2      ,      lowerCAmelCase_   :					int = 2      ,      lowerCAmelCase_   :					int = 2      ,      lowerCAmelCase_   :					bool = True      ,      lowerCAmelCase_   :					str = "gelu"      ,      lowerCAmelCase_   :					float = 0.0_5      ,      lowerCAmelCase_   :					float = 0.1      ,      lowerCAmelCase_   :					float = 0.1      ,      lowerCAmelCase_   :					float = 0.1      ,      lowerCAmelCase_   :					float = 0.1      ,      lowerCAmelCase_   :					int = 100      ,      lowerCAmelCase_   :					float = 0.0_2      ,      lowerCAmelCase_   :					List[Any]=True      ,      lowerCAmelCase_   :					str = "prob"      ,      lowerCAmelCase_   :					int = 5      ,      lowerCAmelCase_   :					bool = True      ,      **lowerCAmelCase_   :					Tuple      ,      )		->     Tuple:
				# time series specific configuration
				UpperCAmelCase_	:					str     	=   prediction_length
				UpperCAmelCase_	:					Tuple     	=   context_length or prediction_length
				UpperCAmelCase_	:					Any     	=   distribution_output
				UpperCAmelCase_	:					Union[str, Any]     	=   loss
				UpperCAmelCase_	:					Any     	=   input_size
				UpperCAmelCase_	:					int     	=   num_time_features
				UpperCAmelCase_	:					Union[str, Any]     	=   lags_sequence if lags_sequence is not None else [1, 2, 3, 4, 5, 6, 7]
				UpperCAmelCase_	:					List[Any]     	=   scaling
				UpperCAmelCase_	:					List[str]     	=   num_dynamic_real_features
				UpperCAmelCase_	:					int     	=   num_static_real_features
				UpperCAmelCase_	:					Any     	=   num_static_categorical_features

				# set cardinality
				if cardinality and num_static_categorical_features > 0:
							if len(lowerCAmelCase_		) != num_static_categorical_features:
										raise ValueError(
										    "The cardinality should be a list of the same length as `num_static_categorical_features`"		)
							UpperCAmelCase_	:					Optional[Any]     	=   cardinality
				else:
							UpperCAmelCase_	:					Optional[int]     	=   [0]

				# set embedding_dimension
				if embedding_dimension and num_static_categorical_features > 0:
							if len(lowerCAmelCase_		) != num_static_categorical_features:
										raise ValueError(
										    "The embedding dimension should be a list of the same length as `num_static_categorical_features`"		)
							UpperCAmelCase_	:					Any     	=   embedding_dimension
				else:
							UpperCAmelCase_	:					Optional[Any]     	=   [min(50      ,      (cat + 1) // 2		) for cat in self.cardinality]

				UpperCAmelCase_	:					Dict     	=   num_parallel_samples

				# Transformer architecture configuration
				UpperCAmelCase_	:					Optional[Any]     	=   input_size * len(self.lags_sequence		) + self._number_of_features
				UpperCAmelCase_	:					List[Any]     	=   d_model
				UpperCAmelCase_	:					List[str]     	=   encoder_attention_heads
				UpperCAmelCase_	:					List[str]     	=   decoder_attention_heads
				UpperCAmelCase_	:					Union[str, Any]     	=   encoder_ffn_dim
				UpperCAmelCase_	:					Union[str, Any]     	=   decoder_ffn_dim
				UpperCAmelCase_	:					Tuple     	=   encoder_layers
				UpperCAmelCase_	:					List[Any]     	=   decoder_layers

				UpperCAmelCase_	:					List[str]     	=   dropout
				UpperCAmelCase_	:					Optional[Any]     	=   attention_dropout
				UpperCAmelCase_	:					Any     	=   activation_dropout
				UpperCAmelCase_	:					Union[str, Any]     	=   encoder_layerdrop
				UpperCAmelCase_	:					Optional[int]     	=   decoder_layerdrop

				UpperCAmelCase_	:					Union[str, Any]     	=   activation_function
				UpperCAmelCase_	:					int     	=   init_std

				UpperCAmelCase_	:					Optional[Any]     	=   use_cache

				# Informer
				UpperCAmelCase_	:					int     	=   attention_type
				UpperCAmelCase_	:					List[str]     	=   sampling_factor
				UpperCAmelCase_	:					Union[str, Any]     	=   distil

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





	@property
	def 	_SCREAMING_SNAKE_CASE ( self   :					List[Any]		)		->     int:
				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
				)



