





"""simple docstring"""


import inspect
import tempfile
import unittest

from huggingface_hub import hf_hub_download

from transformers import is_torch_available
from transformers.testing_utils import is_flaky, require_torch, slow, torch_device

from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, floats_tensor, ids_tensor
from ...test_pipeline_mixin import PipelineTesterMixin


__magic_name__       :					int						=			1e-4

if is_torch_available():
		import torch

		from transformers import AutoformerConfig, AutoformerForPrediction, AutoformerModel
		from transformers.models.autoformer.modeling_autoformer import AutoformerDecoder, AutoformerEncoder






@require_torch
class 							lowercase__			:

			"""simple docstring"""







			def __init__(      self						,   _A						,   _A=1_6						,   _A=1_3						,   _A=7						,   _A=1_4						,   _A=1_0						,   _A=1_9						,   _A=5						,   _A=4						,   _A=True						,   _A=1_6						,   _A=2						,   _A=4						,   _A=4						,   _A="gelu"						,   _A=0.1						,   _A=0.1						,   _A=[1, 2, 3, 4, 5]						,   _A=2_5						,   _A=5						,   ):






									'''simple docstring'''







									UpperCamelCase				:		Dict				   =			d_model
									UpperCamelCase				:		Tuple				   =			parent
									UpperCamelCase				:		Optional[Any]				   =			batch_size
									UpperCamelCase				:		Union[str, Any]				   =			prediction_length
									UpperCamelCase				:		List[Any]				   =			context_length
									UpperCamelCase				:		int				   =			cardinality
									UpperCamelCase				:		Tuple				   =			num_time_features
									UpperCamelCase				:		List[Any]				   =			lags_sequence
									UpperCamelCase				:		Optional[Any]				   =			embedding_dimension
									UpperCamelCase				:		Any				   =			is_training
									UpperCamelCase				:		Any				   =			hidden_size
									UpperCamelCase				:		List[str]				   =			num_hidden_layers
									UpperCamelCase				:		Optional[Any]				   =			num_attention_heads
									UpperCamelCase				:		Any				   =			intermediate_size
									UpperCamelCase				:		Tuple				   =			hidden_act
									UpperCamelCase				:		Union[str, Any]				   =			hidden_dropout_prob
									UpperCamelCase				:		Union[str, Any]				   =			attention_probs_dropout_prob

									UpperCamelCase				:		Union[str, Any]				   =			context_length
									UpperCamelCase				:		str				   =			prediction_length + label_length
									UpperCamelCase				:		Dict				   =			label_length

									UpperCamelCase				:		Any				   =			moving_average
									UpperCamelCase				:		int				   =			autocorrelation_factor







			def   _a      (      self    ):






									'''simple docstring'''







									return AutoformerConfig(
									    d_model=self.d_model						,   encoder_layers=self.num_hidden_layers						,   decoder_layers=self.num_hidden_layers						,   encoder_attention_heads=self.num_attention_heads						,   decoder_attention_heads=self.num_attention_heads						,   encoder_ffn_dim=self.intermediate_size						,   decoder_ffn_dim=self.intermediate_size						,   dropout=self.hidden_dropout_prob						,   attention_dropout=self.attention_probs_dropout_prob						,   prediction_length=self.prediction_length						,   context_length=self.context_length						,   label_length=self.label_length						,   lags_sequence=self.lags_sequence						,   num_time_features=self.num_time_features						,   num_static_categorical_features=1						,   cardinality=[self.cardinality]						,   embedding_dimension=[self.embedding_dimension]						,   moving_average=self.moving_average						,   )







			def   _a      (      self						,   _A    ):






									'''simple docstring'''







									UpperCamelCase				:		List[str]				   =			config.context_length + max(config.lags_sequence    )

									UpperCamelCase				:		Any				   =			ids_tensor([self.batch_size, 1]						,   config.cardinality[0]    )
									UpperCamelCase				:		Any				   =			floats_tensor([self.batch_size, _past_length, config.num_time_features]    )
									UpperCamelCase				:		Union[str, Any]				   =			floats_tensor([self.batch_size, _past_length]    )
									UpperCamelCase				:		str				   =			floats_tensor([self.batch_size, _past_length]    ) > 0.5

									# decoder inputs
									UpperCamelCase				:		int				   =			floats_tensor([self.batch_size, config.prediction_length, config.num_time_features]    )
									UpperCamelCase				:		Optional[Any]				   =			floats_tensor([self.batch_size, config.prediction_length]    )

									UpperCamelCase				:		Dict				   =			{
									    """past_values""": past_values,
									    """static_categorical_features""": static_categorical_features,
									    """past_time_features""": past_time_features,
									    """past_observed_mask""": past_observed_mask,
									    """future_time_features""": future_time_features,
									    """future_values""": future_values,
									}
									return inputs_dict







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		List[Any]				   =			self.get_config()
									UpperCamelCase				:		int				   =			self.prepare_autoformer_inputs_dict(_A    )
									return config, inputs_dict







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase   ,						UpperCamelCase				:		Optional[int]				   =			self.prepare_config_and_inputs()
									return config, inputs_dict







			def   _a      (      self						,   _A						,   _A    ):






									'''simple docstring'''







									UpperCamelCase				:		str				   =			AutoformerModel(config=_A    ).to(_A    ).eval()
									UpperCamelCase				:		List[str]				   =			model(**_A    )

									UpperCamelCase				:		Any				   =			outputs.encoder_last_hidden_state
									UpperCamelCase				:		List[Any]				   =			outputs.last_hidden_state

									with tempfile.TemporaryDirectory() as tmpdirname:
															UpperCamelCase				:		Optional[Any]				   =			model.get_encoder()
															encoder.save_pretrained(_A    )
															UpperCamelCase				:		Union[str, Any]				   =			AutoformerEncoder.from_pretrained(_A    ).to(_A    )

									UpperCamelCase   ,						UpperCamelCase   ,						UpperCamelCase   ,						UpperCamelCase   ,						UpperCamelCase				:		Dict				   =			model.create_network_inputs(**_A    )
									UpperCamelCase   ,						UpperCamelCase				:		Tuple				   =			model.decomposition_layer(transformer_inputs[:, : config.context_length, ...]    )

									UpperCamelCase				:		Dict				   =			torch.cat(
									    (transformer_inputs[:, : config.context_length, ...], feature[:, : config.context_length, ...])						,   dim=-1						,   )
									UpperCamelCase				:		str				   =			encoder(inputs_embeds=_A    )[0]
									self.parent.assertTrue((encoder_last_hidden_state_a - encoder_last_hidden_state).abs().max().item() < 1e-3    )

									UpperCamelCase				:		Tuple				   =			(
									    torch.mean(transformer_inputs[:, : config.context_length, ...]						,   dim=1    )
									    .unsqueeze(1    )
									    .repeat(1						,   config.prediction_length						,   1    )
									)
									UpperCamelCase				:		Optional[Any]				   =			torch.zeros(
									    [transformer_inputs.shape[0], config.prediction_length, transformer_inputs.shape[2]]						,   device=enc_input.device						,   )

									UpperCamelCase				:		List[Any]				   =			torch.cat(
									    (
									        torch.cat((seasonal_input[:, -config.label_length :, ...], zeros)						,   dim=1    ),
									        feature[:, config.context_length - config.label_length :, ...],
									    )						,   dim=-1						,   )
									UpperCamelCase				:		str				   =			torch.cat(
									    (
									        torch.cat((trend_input[:, -config.label_length :, ...], mean)						,   dim=1    ),
									        feature[:, config.context_length - config.label_length :, ...],
									    )						,   dim=-1						,   )

									with tempfile.TemporaryDirectory() as tmpdirname:
															UpperCamelCase				:		Any				   =			model.get_decoder()
															decoder.save_pretrained(_A    )
															UpperCamelCase				:		Optional[Any]				   =			AutoformerDecoder.from_pretrained(_A    ).to(_A    )

									UpperCamelCase				:		str				   =			decoder(
									    trend=_A						,   inputs_embeds=_A						,   encoder_hidden_states=_A						,   )[0]

									self.parent.assertTrue((last_hidden_state_a - last_hidden_state).abs().max().item() < 1e-3    )






@require_torch
class 							lowercase__			(   __SCREAMING_SNAKE_CASE					,     __SCREAMING_SNAKE_CASE					,     unittest.TestCase	):

			"""simple docstring"""
			__lowerCAmelCase     :				Tuple										=  (AutoformerModel, AutoformerForPrediction) if is_torch_available() else ()
			__lowerCAmelCase     :				str										=  (AutoformerForPrediction,) if is_torch_available() else ()
			__lowerCAmelCase     :				Dict										=  {"""feature-extraction""": AutoformerModel} if is_torch_available() else {}
			__lowerCAmelCase     :				List[Any]										=  False
			__lowerCAmelCase     :				Any										=  False
			__lowerCAmelCase     :				List[Any]										=  False
			__lowerCAmelCase     :				Optional[int]										=  False
			__lowerCAmelCase     :				Optional[Any]										=  False
			__lowerCAmelCase     :				Optional[int]										=  False







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Optional[Any]				   =			AutoformerModelTester(self    )
									UpperCamelCase				:		int				   =			ConfigTester(self						,   config_class=_A						,   has_text_modality=_A    )







			def   _a      (      self    ):






									'''simple docstring'''







									self.config_tester.run_common_tests()







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase   ,						UpperCamelCase				:		Tuple				   =			self.model_tester.prepare_config_and_inputs()
									for model_class in self.all_model_classes:
															UpperCamelCase				:		Optional[int]				   =			model_class(_A    )

															with tempfile.TemporaryDirectory() as tmpdirname:
																					model.save_pretrained(_A    )
																					UpperCamelCase   ,						UpperCamelCase				:		Optional[Any]				   =			model_class.from_pretrained(_A						,   output_loading_info=_A    )
															self.assertEqual(info["""missing_keys"""]						,   []    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Dict				   =			self.model_tester.prepare_config_and_inputs_for_common()
									self.model_tester.check_encoder_decoder_model_standalone(*_A    )







			@unittest.skip(reason="""Model has no tokens embeddings"""    )
			def   _a      (      self    ):






									'''simple docstring'''







									pass







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Any				   =			inspect.signature(getattr(_A						,   """forward"""    )    )
									# The main input is the name of the argument after `self`
									UpperCamelCase				:		Optional[Any]				   =			list(model_signature.parameters.keys()    )[1]
									self.assertEqual(AutoformerModel.main_input_name						,   _A    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase   ,						UpperCamelCase				:		Optional[int]				   =			self.model_tester.prepare_config_and_inputs_for_common()

									for model_class in self.all_model_classes:
															UpperCamelCase				:		Dict				   =			model_class(_A    )
															UpperCamelCase				:		int				   =			inspect.signature(model.forward    )
															# signature.parameters is an OrderedDict => so arg_names order is deterministic
															UpperCamelCase				:		str				   =			[*signature.parameters.keys()]

															UpperCamelCase				:		Optional[Any]				   =			[
															    """past_values""",
															    """past_time_features""",
															    """past_observed_mask""",
															    """static_categorical_features""",
															    """static_real_features""",
															    """future_values""",
															    """future_time_features""",
															]

															if model.__class__.__name__ in ["AutoformerForPrediction"]:
																					expected_arg_names.append("""future_observed_mask"""    )

															expected_arg_names.extend(
															    [
															        """decoder_attention_mask""",
															        """head_mask""",
															        """decoder_head_mask""",
															        """cross_attn_head_mask""",
															        """encoder_outputs""",
															        """past_key_values""",
															        """output_hidden_states""",
															        """output_attentions""",
															        """use_cache""",
															        """return_dict""",
															    ]    )

															self.assertListEqual(arg_names[: len(_A    )]						,   _A    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase   ,						UpperCamelCase				:		List[str]				   =			self.model_tester.prepare_config_and_inputs_for_common()
									UpperCamelCase				:		Dict				   =			True

									UpperCamelCase				:		Tuple				   =			getattr(self.model_tester						,   """seq_length"""						,   _A    )
									UpperCamelCase				:		Dict				   =			getattr(self.model_tester						,   """decoder_seq_length"""						,   _A    )
									UpperCamelCase				:		Optional[Any]				   =			getattr(self.model_tester						,   """encoder_seq_length"""						,   _A    )
									UpperCamelCase				:		Optional[int]				   =			getattr(self.model_tester						,   """d_model"""						,   _A    )
									UpperCamelCase				:		Optional[Any]				   =			getattr(self.model_tester						,   """num_attention_heads"""						,   _A    )
									UpperCamelCase				:		Tuple				   =			d_model // num_attention_heads

									for model_class in self.all_model_classes:
															UpperCamelCase				:		List[Any]				   =			True
															UpperCamelCase				:		Any				   =			False
															UpperCamelCase				:		List[str]				   =			True
															UpperCamelCase				:		List[str]				   =			model_class(_A    )
															model.to(_A    )
															model.eval()
															with torch.no_grad():
																					UpperCamelCase				:		Tuple				   =			model(**self._prepare_for_class(_A						,   _A    )    )
															UpperCamelCase				:		Optional[Any]				   =			outputs.encoder_attentions if config.is_encoder_decoder else outputs.attentions
															self.assertEqual(len(_A    )						,   self.model_tester.num_hidden_layers    )

															# check that output_attentions also work using config
															del inputs_dict["output_attentions"]
															UpperCamelCase				:		Tuple				   =			True
															UpperCamelCase				:		Optional[int]				   =			model_class(_A    )
															model.to(_A    )
															model.eval()
															with torch.no_grad():
																					UpperCamelCase				:		List[Any]				   =			model(**self._prepare_for_class(_A						,   _A    )    )
															UpperCamelCase				:		List[str]				   =			outputs.encoder_attentions
															self.assertEqual(len(_A    )						,   self.model_tester.num_hidden_layers    )

															self.assertListEqual(
															    list(attentions[0].shape[-3:]    )						,   [self.model_tester.num_attention_heads, encoder_seq_length, dim]						,   )
															UpperCamelCase				:		List[str]				   =			len(_A    )

															UpperCamelCase				:		List[str]				   =			7

															if "last_hidden_state" in outputs:
																					correct_outlen += 1

															if "trend" in outputs:
																					correct_outlen += 1

															if "past_key_values" in outputs:
																					correct_outlen += 1  # past_key_values have been returned

															if "loss" in outputs:
																					correct_outlen += 1

															if "params" in outputs:
																					correct_outlen += 1

															self.assertEqual(_A						,   _A    )

															# decoder attentions
															UpperCamelCase				:		Optional[int]				   =			outputs.decoder_attentions
															self.assertIsInstance(_A						,   (list, tuple)    )
															self.assertEqual(len(_A    )						,   self.model_tester.num_hidden_layers    )
															self.assertListEqual(
															    list(decoder_attentions[0].shape[-3:]    )						,   [self.model_tester.num_attention_heads, decoder_seq_length, dim]						,   )

															# cross attentions
															UpperCamelCase				:		int				   =			outputs.cross_attentions
															self.assertIsInstance(_A						,   (list, tuple)    )
															self.assertEqual(len(_A    )						,   self.model_tester.num_hidden_layers    )
															self.assertListEqual(
															    list(cross_attentions[0].shape[-3:]    )						,   [self.model_tester.num_attention_heads, decoder_seq_length, dim]						,   )

									# Check attention is always last and order is fine
									UpperCamelCase				:		Any				   =			True
									UpperCamelCase				:		Dict				   =			True
									UpperCamelCase				:		int				   =			model_class(_A    )
									model.to(_A    )
									model.eval()
									with torch.no_grad():
															UpperCamelCase				:		int				   =			model(**self._prepare_for_class(_A						,   _A    )    )

									self.assertEqual(out_len + 2						,   len(_A    )    )

									UpperCamelCase				:		str				   =			outputs.encoder_attentions if config.is_encoder_decoder else outputs.attentions

									self.assertEqual(len(_A    )						,   self.model_tester.num_hidden_layers    )
									self.assertListEqual(
									    list(self_attentions[0].shape[-3:]    )						,   [self.model_tester.num_attention_heads, encoder_seq_length, dim]						,   )







			@is_flaky()
			def   _a      (      self    ):






									'''simple docstring'''







									super().test_retain_grad_hidden_states_attentions()


def      UpperCamelCase							(SCREAMING_SNAKE_CASE="train-batch.pt"     ):
						UpperCamelCase				:		List[str]				   =			hf_hub_download(repo_id="""hf-internal-testing/tourism-monthly-batch"""							,     filename=SCREAMING_SNAKE_CASE							,     repo_type="""dataset"""     )
						UpperCamelCase				:		Optional[int]				   =			torch.load(SCREAMING_SNAKE_CASE							,     map_location=SCREAMING_SNAKE_CASE     )
						return batch






@require_torch
@slow
class 							lowercase__			(   unittest.TestCase	):

			"""simple docstring"""







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Dict				   =			AutoformerModel.from_pretrained("""huggingface/autoformer-tourism-monthly"""    ).to(_A    )
									UpperCamelCase				:		List[str]				   =			prepare_batch()

									with torch.no_grad():
															UpperCamelCase				:		Dict				   =			model(
															    past_values=batch["""past_values"""]						,   past_time_features=batch["""past_time_features"""]						,   past_observed_mask=batch["""past_observed_mask"""]						,   static_categorical_features=batch["""static_categorical_features"""]						,   future_values=batch["""future_values"""]						,   future_time_features=batch["""future_time_features"""]						,   )[0]

									UpperCamelCase				:		Optional[int]				   =			torch.Size(
									    (6_4, model.config.prediction_length + model.config.label_length, model.config.feature_size)    )
									self.assertEqual(output.shape						,   _A    )

									UpperCamelCase				:		Optional[int]				   =			torch.tensor(
									    [[0.35_93, -1.33_98, 0.63_30], [0.22_79, 1.53_96, -0.17_92], [0.04_50, 1.32_25, -0.23_35]]						,   device=_A    )
									self.assertTrue(torch.allclose(output[0, :3, :3]						,   _A						,   atol=_A    )    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Optional[Any]				   =			AutoformerForPrediction.from_pretrained("""huggingface/autoformer-tourism-monthly"""    ).to(_A    )
									UpperCamelCase				:		Dict				   =			prepare_batch("""val-batch.pt"""    )
									with torch.no_grad():
															UpperCamelCase				:		Optional[Any]				   =			model(
															    past_values=batch["""past_values"""]						,   past_time_features=batch["""past_time_features"""]						,   past_observed_mask=batch["""past_observed_mask"""]						,   static_categorical_features=batch["""static_categorical_features"""]						,   ).encoder_last_hidden_state
									UpperCamelCase				:		Dict				   =			torch.Size((6_4, model.config.context_length, model.config.d_model)    )
									self.assertEqual(output.shape						,   _A    )

									UpperCamelCase				:		Any				   =			torch.tensor(
									    [[-0.07_34, -0.90_36, 0.83_58], [4.71_86, 2.41_13, 1.95_81], [1.79_53, 2.35_58, 1.29_70]]						,   device=_A    )
									self.assertTrue(torch.allclose(output[0, :3, :3]						,   _A						,   atol=_A    )    )







			def   _a      (      self    ):






									'''simple docstring'''







									UpperCamelCase				:		Dict				   =			AutoformerForPrediction.from_pretrained("""huggingface/autoformer-tourism-monthly"""    ).to(_A    )
									UpperCamelCase				:		List[Any]				   =			prepare_batch("""val-batch.pt"""    )
									with torch.no_grad():
															UpperCamelCase				:		Optional[Any]				   =			model.generate(
															    static_categorical_features=batch["""static_categorical_features"""]						,   past_time_features=batch["""past_time_features"""]						,   past_values=batch["""past_values"""]						,   future_time_features=batch["""future_time_features"""]						,   past_observed_mask=batch["""past_observed_mask"""]						,   )
									UpperCamelCase				:		Tuple				   =			torch.Size((6_4, model.config.num_parallel_samples, model.config.prediction_length)    )
									self.assertEqual(outputs.sequences.shape						,   _A    )

									UpperCamelCase				:		Dict				   =			torch.tensor([31_30.67_63, 40_56.52_93, 70_53.07_86]						,   device=_A    )
									UpperCamelCase				:		Optional[Any]				   =			outputs.sequences.mean(dim=1    )
									self.assertTrue(torch.allclose(mean_prediction[0, -3:]						,   _A						,   rtol=1e-1    )    )







'''simple docstring'''


import math







def      snake_case_  (    SCREAMING_SNAKE_CASE__	):







				"""simple docstring"""





				_SCREAMING_SNAKE_CASE					:			Tuple							= math.loga(math.sqrt(4 * positive_integer + 1	) / 2 + 1 / 2	)

				return exponent == int(SCREAMING_SNAKE_CASE__	)







def      snake_case_  (    SCREAMING_SNAKE_CASE__ = 1 / 1_2345	):







				"""simple docstring"""





				_SCREAMING_SNAKE_CASE					:			str							= 0
				_SCREAMING_SNAKE_CASE					:			str							= 0

				_SCREAMING_SNAKE_CASE					:			int							= 3
				while True:
								_SCREAMING_SNAKE_CASE					:			Optional[int]							= (integer**2 - 1) / 4
								# if candidate is an integer, then there is a partition for k
								if partition_candidate == int(SCREAMING_SNAKE_CASE__	):
												_SCREAMING_SNAKE_CASE					:			int							= int(SCREAMING_SNAKE_CASE__	)
												total_partitions += 1
												if check_partition_perfect(SCREAMING_SNAKE_CASE__	):
																perfect_partitions += 1
								if perfect_partitions > 0:
												if perfect_partitions / total_partitions < max_proportion:
																return int(SCREAMING_SNAKE_CASE__	)
								integer += 1


if __name__ == "__main__":
				print(F"{solution() = }")




