






import unittest

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

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


if is_torch_available():
	import torch

	from transformers import (
	    YosoForMaskedLM,
	    YosoForMultipleChoice,
	    YosoForQuestionAnswering,
	    YosoForSequenceClassification,
	    YosoForTokenClassification,
	    YosoModel,
	)
	from transformers.models.yoso.modeling_yoso import YOSO_PRETRAINED_MODEL_ARCHIVE_LIST


class        lowercase__       :

	def __init__(							self						,      __UpperCAmelCase						,      __UpperCAmelCase=13						,      __UpperCAmelCase=7						,      __UpperCAmelCase=True						,      __UpperCAmelCase=True						,      __UpperCAmelCase=True						,      __UpperCAmelCase=True						,      __UpperCAmelCase=99						,      __UpperCAmelCase=32						,      __UpperCAmelCase=5						,      __UpperCAmelCase=4						,      __UpperCAmelCase=37						,      __UpperCAmelCase="gelu"						,      __UpperCAmelCase=0.1						,      __UpperCAmelCase=0.1						,      __UpperCAmelCase=512						,      __UpperCAmelCase=16						,      __UpperCAmelCase=2						,      __UpperCAmelCase=0.02						,      __UpperCAmelCase=3						,      __UpperCAmelCase=4						,      __UpperCAmelCase=None						,      )->   Union[str, Any]:







							'''simple docstring'''





							lowerCAmelCase__	 =  parent
							lowerCAmelCase__	 =  batch_size
							lowerCAmelCase__	 =  seq_length
							lowerCAmelCase__	 =  is_training
							lowerCAmelCase__	 =  use_input_mask
							lowerCAmelCase__	 =  use_token_type_ids
							lowerCAmelCase__	 =  use_labels
							lowerCAmelCase__	 =  vocab_size
							lowerCAmelCase__	 =  hidden_size
							lowerCAmelCase__	 =  num_hidden_layers
							lowerCAmelCase__	 =  num_attention_heads
							lowerCAmelCase__	 =  intermediate_size
							lowerCAmelCase__	 =  hidden_act
							lowerCAmelCase__	 =  hidden_dropout_prob
							lowerCAmelCase__	 =  attention_probs_dropout_prob
							lowerCAmelCase__	 =  max_position_embeddings
							lowerCAmelCase__	 =  type_vocab_size
							lowerCAmelCase__	 =  type_sequence_label_size
							lowerCAmelCase__	 =  initializer_range
							lowerCAmelCase__	 =  num_labels
							lowerCAmelCase__	 =  num_choices
							lowerCAmelCase__	 =  scope

	def 						UpperCAmelCase					(							self    )->   Any:







							'''simple docstring'''





							lowerCAmelCase__	 =  ids_tensor([self.batch_size, self.seq_length]						,      self.vocab_size    )

							lowerCAmelCase__	 =  None
							if self.use_input_mask:
													lowerCAmelCase__	 =  random_attention_mask([self.batch_size, self.seq_length]    )

							lowerCAmelCase__	 =  None
							if self.use_token_type_ids:
													lowerCAmelCase__	 =  ids_tensor([self.batch_size, self.seq_length]						,      self.type_vocab_size    )

							lowerCAmelCase__	 =  None
							lowerCAmelCase__	 =  None
							lowerCAmelCase__	 =  None
							if self.use_labels:
													lowerCAmelCase__	 =  ids_tensor([self.batch_size]						,      self.type_sequence_label_size    )
													lowerCAmelCase__	 =  ids_tensor([self.batch_size, self.seq_length]						,      self.num_labels    )
													lowerCAmelCase__	 =  ids_tensor([self.batch_size]						,      self.num_choices    )

							lowerCAmelCase__	 =  self.get_config()

							return config, input_ids, token_type_ids, input_mask, sequence_labels, token_labels, choice_labels

	def 						UpperCAmelCase					(							self    )->   Dict:







							'''simple docstring'''





							return YosoConfig(
							    vocab_size=self.vocab_size						,      hidden_size=self.hidden_size						,      num_hidden_layers=self.num_hidden_layers						,      num_attention_heads=self.num_attention_heads						,      intermediate_size=self.intermediate_size						,      hidden_act=self.hidden_act						,      hidden_dropout_prob=self.hidden_dropout_prob						,      attention_probs_dropout_prob=self.attention_probs_dropout_prob						,      max_position_embeddings=self.max_position_embeddings						,      type_vocab_size=self.type_vocab_size						,      is_decoder=__UpperCAmelCase						,      initializer_range=self.initializer_range						,      )

	def 						UpperCAmelCase					(							self    )->   Optional[Any]:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.get_config()
							lowerCAmelCase__	 =  300
							return config

	def 						UpperCAmelCase					(							self    )->   Dict:







							'''simple docstring'''





							(
							    (
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,														
							)	 =  self.prepare_config_and_inputs()

							lowerCAmelCase__	 =  True
							lowerCAmelCase__	 =  floats_tensor([self.batch_size, self.seq_length, self.hidden_size]    )
							lowerCAmelCase__	 =  ids_tensor([self.batch_size, self.seq_length]						,      vocab_size=2    )

							return (
							    config,
							    input_ids,
							    token_type_ids,
							    input_mask,
							    sequence_labels,
							    token_labels,
							    choice_labels,
							    encoder_hidden_states,
							    encoder_attention_mask,
							)

	def 						UpperCAmelCase					(							self						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase    )->   Tuple:







							'''simple docstring'''





							lowerCAmelCase__	 =  YosoModel(config=__UpperCAmelCase    )
							model.to(__UpperCAmelCase    )
							model.eval()
							lowerCAmelCase__	 =  model(__UpperCAmelCase						,      attention_mask=__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase    )
							lowerCAmelCase__	 =  model(__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase    )
							lowerCAmelCase__	 =  model(__UpperCAmelCase    )
							self.parent.assertEqual(result.last_hidden_state.shape						,      (self.batch_size, self.seq_length, self.hidden_size)    )

	def 						UpperCAmelCase					(							self						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      )->   Any:







							'''simple docstring'''





							lowerCAmelCase__	 =  True
							lowerCAmelCase__	 =  YosoModel(__UpperCAmelCase    )
							model.to(__UpperCAmelCase    )
							model.eval()
							lowerCAmelCase__	 =  model(
							    __UpperCAmelCase						,      attention_mask=__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase						,      encoder_hidden_states=__UpperCAmelCase						,      encoder_attention_mask=__UpperCAmelCase						,      )
							lowerCAmelCase__	 =  model(
							    __UpperCAmelCase						,      attention_mask=__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase						,      encoder_hidden_states=__UpperCAmelCase						,      )
							lowerCAmelCase__	 =  model(__UpperCAmelCase						,      attention_mask=__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase    )
							self.parent.assertEqual(result.last_hidden_state.shape						,      (self.batch_size, self.seq_length, self.hidden_size)    )

	def 						UpperCAmelCase					(							self						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase    )->   int:







							'''simple docstring'''





							lowerCAmelCase__	 =  YosoForMaskedLM(config=__UpperCAmelCase    )
							model.to(__UpperCAmelCase    )
							model.eval()
							lowerCAmelCase__	 =  model(__UpperCAmelCase						,      attention_mask=__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase						,      labels=__UpperCAmelCase    )
							self.parent.assertEqual(result.logits.shape						,      (self.batch_size, self.seq_length, self.vocab_size)    )

	def 						UpperCAmelCase					(							self						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase    )->   Optional[Any]:







							'''simple docstring'''





							lowerCAmelCase__	 =  YosoForQuestionAnswering(config=__UpperCAmelCase    )
							model.to(__UpperCAmelCase    )
							model.eval()
							lowerCAmelCase__	 =  model(
							    __UpperCAmelCase						,      attention_mask=__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase						,      start_positions=__UpperCAmelCase						,      end_positions=__UpperCAmelCase						,      )
							self.parent.assertEqual(result.start_logits.shape						,      (self.batch_size, self.seq_length)    )
							self.parent.assertEqual(result.end_logits.shape						,      (self.batch_size, self.seq_length)    )

	def 						UpperCAmelCase					(							self						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase    )->   Any:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.num_labels
							lowerCAmelCase__	 =  YosoForSequenceClassification(__UpperCAmelCase    )
							model.to(__UpperCAmelCase    )
							model.eval()
							lowerCAmelCase__	 =  model(__UpperCAmelCase						,      attention_mask=__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase						,      labels=__UpperCAmelCase    )
							self.parent.assertEqual(result.logits.shape						,      (self.batch_size, self.num_labels)    )

	def 						UpperCAmelCase					(							self						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase    )->   Optional[Any]:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.num_labels
							lowerCAmelCase__	 =  YosoForTokenClassification(config=__UpperCAmelCase    )
							model.to(__UpperCAmelCase    )
							model.eval()
							lowerCAmelCase__	 =  model(__UpperCAmelCase						,      attention_mask=__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase						,      labels=__UpperCAmelCase    )
							self.parent.assertEqual(result.logits.shape						,      (self.batch_size, self.seq_length, self.num_labels)    )

	def 						UpperCAmelCase					(							self						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase						,      __UpperCAmelCase    )->   List[str]:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.num_choices
							lowerCAmelCase__	 =  YosoForMultipleChoice(config=__UpperCAmelCase    )
							model.to(__UpperCAmelCase    )
							model.eval()
							lowerCAmelCase__	 =  input_ids.unsqueeze(1    ).expand(-1						,      self.num_choices						,      -1    ).contiguous()
							lowerCAmelCase__	 =  token_type_ids.unsqueeze(1    ).expand(-1						,      self.num_choices						,      -1    ).contiguous()
							lowerCAmelCase__	 =  input_mask.unsqueeze(1    ).expand(-1						,      self.num_choices						,      -1    ).contiguous()
							lowerCAmelCase__	 =  model(
							    __UpperCAmelCase						,      attention_mask=__UpperCAmelCase						,      token_type_ids=__UpperCAmelCase						,      labels=__UpperCAmelCase						,      )
							self.parent.assertEqual(result.logits.shape						,      (self.batch_size, self.num_choices)    )


	def 						UpperCAmelCase					(							self    )->   Optional[int]:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.prepare_config_and_inputs()
							(
							    (
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,							(
							    lowerCAmelCase__							
							) ,														
							)	 =  config_and_inputs
							lowerCAmelCase__	 =  {"input_ids": input_ids, "token_type_ids": token_type_ids, "attention_mask": input_mask}
							return config, inputs_dict





@require_torch
class        lowercase__       (     _UpperCAmelCase,   _UpperCAmelCase,   unittest.TestCase		):
	a_             =(
	    (
	        YosoModel,
	        YosoForMaskedLM,
	        YosoForMultipleChoice,
	        YosoForQuestionAnswering,
	        YosoForSequenceClassification,
	        YosoForTokenClassification,
	    )
	    if is_torch_available()
	    else ()
	)
	a_             =False
	a_             =False
	a_             =False

	a_             =()
	a_             =(
	    {
	        """feature-extraction""": YosoModel,
	        """fill-mask""": YosoForMaskedLM,
	        """question-answering""": YosoForQuestionAnswering,
	        """text-classification""": YosoForSequenceClassification,
	        """token-classification""": YosoForTokenClassification,
	        """zero-shot""": YosoForSequenceClassification,
	    }
	    if is_torch_available()
	    else {}
	)

	def 						UpperCAmelCase					(							self    )->   List[Any]:







							'''simple docstring'''





							lowerCAmelCase__	 =  YosoModelTester(self    )
							lowerCAmelCase__	 =  ConfigTester(self						,      config_class=__UpperCAmelCase						,      hidden_size=37    )

	def 						UpperCAmelCase					(							self    )->   List[str]:







							'''simple docstring'''





							self.config_tester.run_common_tests()

	def 						UpperCAmelCase					(							self    )->   Optional[Any]:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_model(*__UpperCAmelCase    )

	def 						UpperCAmelCase					(							self    )->   List[str]:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.model_tester.prepare_config_and_inputs()
							for type in ["absolute", "relative_key", "relative_key_query"]:
													lowerCAmelCase__	 =  type
													self.model_tester.create_and_check_model(*__UpperCAmelCase    )

	def 						UpperCAmelCase					(							self    )->   List[str]:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_for_masked_lm(*__UpperCAmelCase    )

	def 						UpperCAmelCase					(							self    )->   str:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_for_multiple_choice(*__UpperCAmelCase    )

	def 						UpperCAmelCase					(							self    )->   List[Any]:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_for_question_answering(*__UpperCAmelCase    )

	def 						UpperCAmelCase					(							self    )->   Dict:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_for_sequence_classification(*__UpperCAmelCase    )

	def 						UpperCAmelCase					(							self    )->   Optional[int]:







							'''simple docstring'''





							lowerCAmelCase__	 =  self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_for_token_classification(*__UpperCAmelCase    )

	@slow
	def 						UpperCAmelCase					(							self    )->   List[str]:







							'''simple docstring'''





							for model_name in YOSO_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
													lowerCAmelCase__	 =  YosoModel.from_pretrained(__UpperCAmelCase    )
													self.assertIsNotNone(__UpperCAmelCase    )


	def 						UpperCAmelCase					(							self    )->   Dict:







							'''simple docstring'''





							return





@require_torch
class        lowercase__       (     unittest.TestCase		):

	@slow
	def 						UpperCAmelCase					(							self    )->   int:







							'''simple docstring'''





							lowerCAmelCase__	 =  YosoModel.from_pretrained("uw-madison/yoso-4096"    )
							lowerCAmelCase__	 =  torch.tensor([[0, 1, 2, 3, 4, 5]]    )

							with torch.no_grad():
													lowerCAmelCase__	 =  model(__UpperCAmelCase    )[0]

							lowerCAmelCase__	 =  torch.Size((1, 6, 768)    )
							self.assertEqual(output.shape						,      __UpperCAmelCase    )

							lowerCAmelCase__	 =  torch.tensor(
							    [[[-0.0_611, 0.1_242, 0.0_840], [0.0_280, -0.0_048, 0.1_125], [0.0_106, 0.0_226, 0.0_751]]]    )

							self.assertTrue(torch.allclose(output[:, :3, :3]						,      __UpperCAmelCase						,      atol=1E-4    )    )

	@slow
	def 						UpperCAmelCase					(							self    )->   int:







							'''simple docstring'''





							lowerCAmelCase__	 =  YosoForMaskedLM.from_pretrained("uw-madison/yoso-4096"    )
							lowerCAmelCase__	 =  torch.tensor([[0, 1, 2, 3, 4, 5]]    )

							with torch.no_grad():
													lowerCAmelCase__	 =  model(__UpperCAmelCase    )[0]

							lowerCAmelCase__	 =  50265

							lowerCAmelCase__	 =  torch.Size((1, 6, vocab_size)    )
							self.assertEqual(output.shape						,      __UpperCAmelCase    )

							lowerCAmelCase__	 =  torch.tensor(
							    [[[-2.1_313, -3.7_285, -2.2_407], [-2.7_047, -3.3_314, -2.6_408], [0.0_629, -2.5_166, -0.3_356]]]    )

							self.assertTrue(torch.allclose(output[:, :3, :3]						,      __UpperCAmelCase						,      atol=1E-4    )    )


	@slow
	def 						UpperCAmelCase					(							self    )->   Tuple:







							'''simple docstring'''





							lowerCAmelCase__	 =  YosoForMaskedLM.from_pretrained("uw-madison/yoso-4096"    )
							lowerCAmelCase__	 =  torch.arange(4096    ).unsqueeze(0    )

							with torch.no_grad():
													lowerCAmelCase__	 =  model(__UpperCAmelCase    )[0]

							lowerCAmelCase__	 =  50265

							lowerCAmelCase__	 =  torch.Size((1, 4096, vocab_size)    )
							self.assertEqual(output.shape						,      __UpperCAmelCase    )

							lowerCAmelCase__	 =  torch.tensor(
							    [[[-2.3_914, -4.3_742, -5.0_956], [-4.0_988, -4.2_384, -7.0_406], [-3.1_427, -3.7_192, -6.6_800]]]    )

							self.assertTrue(torch.allclose(output[:, :3, :3]						,      __UpperCAmelCase						,      atol=1E-4    )    )














def     _a					(       UpperCamelCase_   :			int = 100				)	->				int:
						"""simple docstring"""







						lowerCAmelCase__	 =  1
						lowerCAmelCase__	 =  0
						for i in range(1      ,				num + 1				):
												fact *= i

						for j in str(UpperCamelCase_				):
												result += int(UpperCamelCase_				)

						return result


if __name__ == "__main__":
	print(solution(int(input('''Enter the Number: ''').strip())))






