
import unittest

from transformers import AutoTokenizer, FalconConfig, is_torch_available
from transformers.testing_utils import require_torch, slow, torch_device

from ...generation.test_utils import GenerationTesterMixin
from ...test_configuration_common import ConfigTester
from ...test_modeling_common import ModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_torch_available():
							import torch

							from transformers import (
							    FalconForCausalLM,
							    FalconForQuestionAnswering,
							    FalconForSequenceClassification,
							    FalconForTokenClassification,
							    FalconModel,
							)





class     lowerCamelCase      :







	def __init__(     self      :List[Any]   ,     lowercase      :Optional[int]   ,     lowercase      :Tuple=3   ,     lowercase      :List[Any]=7   ,     lowercase      :Tuple=True   ,     lowercase      :List[str]=True   ,     lowercase      :Optional[Any]=False   ,     lowercase      :Union[str, Any]=True   ,     lowercase      :Tuple=9_9   ,     lowercase      :Dict=3_2   ,     lowercase      :Tuple=5   ,     lowercase      :str=4   ,     lowercase      :List[Any]=3_7   ,     lowercase      :int="gelu"   ,     lowercase      :Optional[int]=0.1   ,     lowercase      :Any=0.1   ,     lowercase      :int=5_1_2   ,     lowercase      :List[Any]=1_6   ,     lowercase      :Tuple=2   ,     lowercase      :List[str]=0.02   ,     lowercase      :List[str]=3   ,     lowercase      :Any=4   ,     lowercase      :List[Any]=None   ,     )		->      Tuple:







				"""simple docstring"""






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







	def  snake_case__     (     self      :List[str]			)		->      int:







				"""simple docstring"""






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

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

				SCREAMING_SNAKE_CASE     						= None

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

				SCREAMING_SNAKE_CASE     						= self.get_config()

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







	def  snake_case__     (     self      :Dict			)		->      Tuple:







				"""simple docstring"""






				return FalconConfig(
				    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=lowercase   ,     initializer_range=self.initializer_range   ,     pad_token_id=1   ,     new_decoder_architecture=lowercase   ,     )







	def  snake_case__     (     self      :str   ,     lowercase      :Dict   ,     lowercase      :Union[str, Any]   ,     lowercase      :Dict   ,     lowercase      :Optional[int]   ,     lowercase      :Any   ,     lowercase      :Optional[Any]   ,     lowercase      :str			)		->      str:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE     						= FalconModel(config=lowercase			)
				model.to(lowercase			)
				model.eval()
				SCREAMING_SNAKE_CASE     						= model(lowercase   ,     attention_mask=lowercase			)
				SCREAMING_SNAKE_CASE     						= model(lowercase			)
				self.parent.assertEqual(result.last_hidden_state.shape   ,     (self.batch_size, self.seq_length, self.hidden_size)			)







	def  snake_case__     (     self      :Dict   ,     lowercase      :Optional[int]   ,     lowercase      :Dict   ,     lowercase      :Any   ,     lowercase      :str   ,     lowercase      :int   ,     lowercase      :List[str]   ,     lowercase      :Optional[Any]   ,     lowercase      :List[Any]   ,     lowercase      :List[Any]   ,     )		->      List[Any]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE     						= True
				SCREAMING_SNAKE_CASE     						= FalconModel(lowercase			)
				model.to(lowercase			)
				model.eval()
				SCREAMING_SNAKE_CASE     						= model(
				    lowercase   ,     attention_mask=lowercase   ,     encoder_hidden_states=lowercase   ,     encoder_attention_mask=lowercase   ,     )
				SCREAMING_SNAKE_CASE     						= model(
				    lowercase   ,     attention_mask=lowercase   ,     encoder_hidden_states=lowercase   ,     )
				SCREAMING_SNAKE_CASE     						= model(lowercase   ,     attention_mask=lowercase			)
				self.parent.assertEqual(result.last_hidden_state.shape   ,     (self.batch_size, self.seq_length, self.hidden_size)			)







	def  snake_case__     (     self      :str   ,     lowercase      :Union[str, Any]   ,     lowercase      :str   ,     lowercase      :Tuple   ,     lowercase      :Union[str, Any]   ,     lowercase      :Union[str, Any]   ,     lowercase      :List[str]   ,     lowercase      :str   ,     lowercase      :Optional[int]   ,     lowercase      :Optional[int]   ,     )		->      Tuple:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE     						= FalconForCausalLM(config=lowercase			)
				model.to(lowercase			)
				model.eval()
				SCREAMING_SNAKE_CASE     						= model(lowercase   ,     attention_mask=lowercase   ,     labels=lowercase			)
				self.parent.assertEqual(result.logits.shape   ,     (self.batch_size, self.seq_length, self.vocab_size)			)







	def  snake_case__     (     self      :Optional[int]   ,     lowercase      :Any   ,     lowercase      :Tuple   ,     lowercase      :int   ,     lowercase      :List[str]   ,     lowercase      :Dict   ,     lowercase      :List[str]   ,     lowercase      :Optional[int]   ,     lowercase      :List[str]   ,     lowercase      :Any   ,     )		->      Any:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE     						= True
				SCREAMING_SNAKE_CASE     						= True
				SCREAMING_SNAKE_CASE     						= FalconForCausalLM(config=lowercase			)
				model.to(lowercase			)
				model.eval()

				# first forward pass
				SCREAMING_SNAKE_CASE     						= model(
				    lowercase   ,     attention_mask=lowercase   ,     encoder_hidden_states=lowercase   ,     encoder_attention_mask=lowercase   ,     use_cache=lowercase   ,     )
				SCREAMING_SNAKE_CASE     						= outputs.past_key_values

				# create hypothetical multiple next token and extent to next_input_ids
				SCREAMING_SNAKE_CASE     						= ids_tensor((self.batch_size, 3)   ,     config.vocab_size			)
				SCREAMING_SNAKE_CASE     						= ids_tensor((self.batch_size, 3)   ,     vocab_size=2			)

				# append to next input_ids and
				SCREAMING_SNAKE_CASE     						= torch.cat([input_ids, next_tokens]   ,     dim=-1			)
				SCREAMING_SNAKE_CASE     						= torch.cat([input_mask, next_mask]   ,     dim=-1			)

				SCREAMING_SNAKE_CASE     						= model(
				    lowercase   ,     attention_mask=lowercase   ,     encoder_hidden_states=lowercase   ,     encoder_attention_mask=lowercase   ,     output_hidden_states=lowercase   ,     )['''hidden_states'''][0]
				SCREAMING_SNAKE_CASE     						= model(
				    lowercase   ,     attention_mask=lowercase   ,     encoder_hidden_states=lowercase   ,     encoder_attention_mask=lowercase   ,     past_key_values=lowercase   ,     output_hidden_states=lowercase   ,     )['''hidden_states'''][0]

				# select random slice
				SCREAMING_SNAKE_CASE     						= ids_tensor((1,)   ,     output_from_past.shape[-1]			).item()
				SCREAMING_SNAKE_CASE     						= output_from_no_past[:, -3:, random_slice_idx].detach()
				SCREAMING_SNAKE_CASE     						= output_from_past[:, :, random_slice_idx].detach()

				self.parent.assertTrue(output_from_past_slice.shape[1] == next_tokens.shape[1]			)

				# test that outputs are equal for slice
				self.parent.assertTrue(torch.allclose(lowercase   ,     lowercase   ,     atol=1e-3			)			)







	def  snake_case__     (     self      :Any			)		->      str:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE     						= self.prepare_config_and_inputs()
				(
				    (
				    SCREAMING_SNAKE_CASE
				)						,							(
				    SCREAMING_SNAKE_CASE
				)						,							(
				    SCREAMING_SNAKE_CASE
				)						,							(
				    SCREAMING_SNAKE_CASE
				)						,							(
				    SCREAMING_SNAKE_CASE
				)						,							(
				    SCREAMING_SNAKE_CASE
				)						,							(
				    SCREAMING_SNAKE_CASE
				)						,							
				)     						= config_and_inputs
				SCREAMING_SNAKE_CASE     						= {'''input_ids''': input_ids, '''attention_mask''': input_mask}
				return config, inputs_dict





@require_torch
class     lowerCamelCase      (       __lowerCamelCase ,		__lowerCamelCase ,		__lowerCamelCase ,		unittest.TestCase					):
	UpperCamelCase_  :					Dict    		=	(
	    (
	        FalconModel,
	        FalconForCausalLM,
	        FalconForSequenceClassification,
	        FalconForTokenClassification,
	        FalconForQuestionAnswering,
	    )
	    if is_torch_available()
	    else ()
	)
	UpperCamelCase_  :					Optional[Any]    		=	(FalconForCausalLM,) if is_torch_available() else ()
	UpperCamelCase_  :					List[str]    		=	(
	    {
	        'feature-extraction': FalconModel,
	        'text-classification': FalconForSequenceClassification,
	        'text-generation': FalconForCausalLM,
	        'question-answering': FalconForQuestionAnswering,
	        'token-classification': FalconForTokenClassification,
	        'zero-shot': FalconForSequenceClassification,
	    }
	    if is_torch_available()
	    else {}
	)
	UpperCamelCase_  :					int    		=	False
	UpperCamelCase_  :					Union[str, Any]    		=	False







	def  snake_case__     (     self      :Union[str, Any]			)		->      Union[str, Any]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE     						= FalconModelTester(self			)
				SCREAMING_SNAKE_CASE     						= ConfigTester(self   ,     config_class=lowercase   ,     hidden_size=3_7			)







	def  snake_case__     (     self      :Optional[int]			)		->      Dict:







				"""simple docstring"""






				self.config_tester.run_common_tests()







	def  snake_case__     (     self      :Dict			)		->      Union[str, Any]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE     						= self.model_tester.prepare_config_and_inputs()
				self.model_tester.create_and_check_model(*lowercase			)







	def  snake_case__     (     self      :Optional[Any]			)		->      List[str]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE						,							*SCREAMING_SNAKE_CASE     						= self.model_tester.prepare_config_and_inputs()
				for alibi in [True, False]:
							SCREAMING_SNAKE_CASE     						= alibi
							self.model_tester.create_and_check_model(lowercase   ,     *lowercase			)







	def  snake_case__     (     self      :Union[str, Any]			)		->      List[str]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE						,							SCREAMING_SNAKE_CASE     						= self.model_tester.prepare_config_and_inputs_for_common()
				SCREAMING_SNAKE_CASE     						= 3
				SCREAMING_SNAKE_CASE     						= input_dict['''input_ids''']
				SCREAMING_SNAKE_CASE     						= input_ids.ne(1			).to(lowercase			)
				SCREAMING_SNAKE_CASE     						= ids_tensor([self.model_tester.batch_size]   ,     self.model_tester.type_sequence_label_size			)
				SCREAMING_SNAKE_CASE     						= FalconForSequenceClassification(lowercase			)
				model.to(lowercase			)
				model.eval()
				SCREAMING_SNAKE_CASE     						= model(lowercase   ,     attention_mask=lowercase   ,     labels=lowercase			)
				self.assertEqual(result.logits.shape   ,     (self.model_tester.batch_size, self.model_tester.num_labels)			)







	def  snake_case__     (     self      :List[Any]			)		->      Optional[Any]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE						,							SCREAMING_SNAKE_CASE     						= self.model_tester.prepare_config_and_inputs_for_common()
				SCREAMING_SNAKE_CASE     						= 3
				SCREAMING_SNAKE_CASE     						= '''single_label_classification'''
				SCREAMING_SNAKE_CASE     						= input_dict['''input_ids''']
				SCREAMING_SNAKE_CASE     						= input_ids.ne(1			).to(lowercase			)
				SCREAMING_SNAKE_CASE     						= ids_tensor([self.model_tester.batch_size]   ,     self.model_tester.type_sequence_label_size			)
				SCREAMING_SNAKE_CASE     						= FalconForSequenceClassification(lowercase			)
				model.to(lowercase			)
				model.eval()
				SCREAMING_SNAKE_CASE     						= model(lowercase   ,     attention_mask=lowercase   ,     labels=lowercase			)
				self.assertEqual(result.logits.shape   ,     (self.model_tester.batch_size, self.model_tester.num_labels)			)







	def  snake_case__     (     self      :Union[str, Any]			)		->      Optional[int]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE						,							SCREAMING_SNAKE_CASE     						= self.model_tester.prepare_config_and_inputs_for_common()
				SCREAMING_SNAKE_CASE     						= input_dict['''input_ids''']
				SCREAMING_SNAKE_CASE     						= FalconForCausalLM(lowercase			)
				model.to(lowercase			)
				model.eval()
				SCREAMING_SNAKE_CASE     						= model(lowercase   ,     use_cache=lowercase			)
				SCREAMING_SNAKE_CASE     						= input_ids.shape[0]
				SCREAMING_SNAKE_CASE     						= model._convert_to_rw_cache(result.past_key_values			)
				SCREAMING_SNAKE_CASE     						= model._convert_cache_to_standard_format(lowercase   ,     lowercase			)
				for layer in range(len(lowercase			)			):
							for tensor_idx in range(2			):
										self.assertTrue(rw_cache[layer][tensor_idx].ndim == 3			)
										self.assertTrue(result.past_key_values[layer][tensor_idx].ndim == 4			)
										self.assertTrue(
										    torch.all(result.past_key_values[layer][tensor_idx] == standard_cache[layer][tensor_idx]			)			)







	def  snake_case__     (     self      :Tuple			)		->      List[str]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE						,							SCREAMING_SNAKE_CASE     						= self.model_tester.prepare_config_and_inputs_for_common()
				SCREAMING_SNAKE_CASE     						= 3
				SCREAMING_SNAKE_CASE     						= '''multi_label_classification'''
				SCREAMING_SNAKE_CASE     						= input_dict['''input_ids''']
				SCREAMING_SNAKE_CASE     						= input_ids.ne(1			).to(lowercase			)
				SCREAMING_SNAKE_CASE     						= ids_tensor(
				    [self.model_tester.batch_size, config.num_labels]   ,     self.model_tester.type_sequence_label_size			).to(torch.float			)
				SCREAMING_SNAKE_CASE     						= FalconForSequenceClassification(lowercase			)
				model.to(lowercase			)
				model.eval()
				SCREAMING_SNAKE_CASE     						= model(lowercase   ,     attention_mask=lowercase   ,     labels=lowercase			)
				self.assertEqual(result.logits.shape   ,     (self.model_tester.batch_size, self.model_tester.num_labels)			)







	def  snake_case__     (     self      :Optional[Any]			)		->      str:







				"""simple docstring"""






				for model_class in self.all_generative_model_classes:
							SCREAMING_SNAKE_CASE						,							SCREAMING_SNAKE_CASE     						= self.model_tester.prepare_config_and_inputs_for_common()

							# If it doesn't support cache, pass the test
							if not hasattr(lowercase   ,     '''use_cache'''			):
										return

							SCREAMING_SNAKE_CASE     						= model_class(lowercase			).to(lowercase			)
							if "use_cache" not in inputs:
										SCREAMING_SNAKE_CASE     						= True
							SCREAMING_SNAKE_CASE     						= model(**lowercase			)

							# If "past_key_values" is not returned, pass the test (e.g. RWKV uses a different cache name and format)
							if "past_key_values" not in outputs:
										return

							SCREAMING_SNAKE_CASE     						= (
							    getattr(lowercase   ,     '''decoder_layers'''   ,     lowercase			)
							    or getattr(lowercase   ,     '''num_decoder_layers'''   ,     lowercase			)
							    or config.num_hidden_layers
							)
							SCREAMING_SNAKE_CASE     						= getattr(lowercase   ,     '''num_kv_heads'''   ,     config.num_attention_heads			)
							SCREAMING_SNAKE_CASE     						= getattr(lowercase   ,     '''d_model'''   ,     config.hidden_size			)
							SCREAMING_SNAKE_CASE     						= embed_dim // num_attention_heads

							SCREAMING_SNAKE_CASE     						= outputs['''past_key_values''']
							self.assertEqual(len(lowercase			)   ,     lowercase			)

							SCREAMING_SNAKE_CASE						,							SCREAMING_SNAKE_CASE     						= inputs['''input_ids'''].shape
							for i in range(lowercase			):
										if config.new_decoder_architecture:
													SCREAMING_SNAKE_CASE     						= config.num_attention_heads
										elif config.multi_query:
													SCREAMING_SNAKE_CASE     						= 1
										self.assertEqual(len(past_kv[0]			)   ,     2			)  # K V for the decoder = 2
										self.assertEqual(
										    past_kv[i][0].shape   ,     (batch_size, num_attention_heads, seq_length, per_head_embed_dim)			)
										self.assertEqual(
										    past_kv[i][1].shape   ,     (batch_size, num_attention_heads, seq_length, per_head_embed_dim)			)





@require_torch
class     lowerCamelCase      (       unittest.TestCase					):







	@slow
	def  snake_case__     (     self      :List[Any]			)		->      Optional[int]:







				"""simple docstring"""






				SCREAMING_SNAKE_CASE     						= AutoTokenizer.from_pretrained('''Rocketknight1/falcon-rw-1b'''			)
				SCREAMING_SNAKE_CASE     						= FalconForCausalLM.from_pretrained('''Rocketknight1/falcon-rw-1b'''			)
				model.eval()
				model.to(lowercase			)
				SCREAMING_SNAKE_CASE     						= tokenizer('''My favorite food is'''   ,     return_tensors='''pt'''			).to(lowercase			)

				SCREAMING_SNAKE_CASE     						= (
				    '''My favorite food is pizza. I love it so much that I have a pizza party every year for my birthday.'''
				)

				SCREAMING_SNAKE_CASE     						= model.generate(**lowercase   ,     do_sample=lowercase   ,     max_new_tokens=1_9			)
				SCREAMING_SNAKE_CASE     						= tokenizer.batch_decode(lowercase			)[0]

				self.assertEqual(lowercase   ,     lowercase			)







	@slow
	def  snake_case__     (     self      :Union[str, Any]			)		->      List[Any]:







				"""simple docstring"""






				for repo in ["Rocketknight1/tiny-random-falcon-7b", "Rocketknight1/tiny-random-falcon-40b"]:
							SCREAMING_SNAKE_CASE     						= AutoTokenizer.from_pretrained(lowercase			)
							SCREAMING_SNAKE_CASE     						= FalconForCausalLM.from_pretrained(lowercase			)
							model.eval()
							model.to(lowercase			)
							SCREAMING_SNAKE_CASE     						= tokenizer('''My favorite food is'''   ,     return_tensors='''pt'''			).to(lowercase			)

							# We just test that these run without errors - the models are randomly initialized
							# and so the actual text outputs will be garbage
							model.generate(**lowercase   ,     do_sample=lowercase   ,     max_new_tokens=4			)
							model.generate(**lowercase   ,     do_sample=lowercase   ,     max_new_tokens=4			)
							model.generate(**lowercase   ,     num_beams=2   ,     max_new_tokens=4			)







	@slow
	def  snake_case__     (     self      :List[Any]			)		->      int:







				"""simple docstring"""






				with torch.no_grad():
							for repo in [
							    "Rocketknight1/falcon-rw-1b",
							    "Rocketknight1/tiny-random-falcon-7b",
							    "Rocketknight1/tiny-random-falcon-40b",
							]:
										SCREAMING_SNAKE_CASE     						= AutoTokenizer.from_pretrained(lowercase			)
										SCREAMING_SNAKE_CASE     						= FalconForCausalLM.from_pretrained(lowercase			)
										model.eval()
										model.to(device=lowercase			)
										SCREAMING_SNAKE_CASE     						= tokenizer('''My favorite food is'''   ,     return_tensors='''pt'''			).to(lowercase			)

										# Test results are the same with and without cache
										SCREAMING_SNAKE_CASE     						= model.generate(**lowercase   ,     do_sample=lowercase   ,     max_new_tokens=2_0   ,     use_cache=lowercase			)
										SCREAMING_SNAKE_CASE     						= model.generate(**lowercase   ,     do_sample=lowercase   ,     max_new_tokens=2_0   ,     use_cache=lowercase			)
										self.assertTrue((outputs_cache - outputs_no_cache).sum().item() == 0			)

def    a      ( a	)     ->List[Any]:




			'''simple docstring'''


			SCREAMING_SNAKE_CASE     						= len(a	)
			while cur > 1:
						# Find the maximum number in arr
						SCREAMING_SNAKE_CASE     						= arr.index(max(arr[0:cur]	)	)
						# Reverse from 0 to mi
						SCREAMING_SNAKE_CASE     						= arr[mi::-1] + arr[mi + 1 : len(a	)]
						# Reverse whole list
						SCREAMING_SNAKE_CASE     						= arr[cur - 1 :: -1] + arr[cur : len(a	)]
						cur -= 1
			return arr


if __name__ == "__main__":
							__lowerCAmelCase					   =       input('Enter numbers separated by a comma:\n').strip()
							__lowerCAmelCase					   =       [int(item) for item in user_input.split(',')]
							print(pancake_sort(unsorted))