"""simple docstring"""





import os
import re
import unicodedata
from shutil import copyfile
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union

import sentencepiece as spm

from ...tokenization_utils import PreTrainedTokenizer
from ...utils import is_torch_available, logging


if is_torch_available():
				import torch


if TYPE_CHECKING:
				from transformers.pipelines.conversational import Conversation


__A	=					logging.get_logger(__name__)
__A	=					{'''vocab_file''': '''spiece.model'''}

__A	=					{
    '''vocab_file''': {
        '''AI-Sweden/gpt-sw3-126m''': '''https://huggingface.co/AI-Sweden/gpt-sw3-126m/resolve/main/spiece.model''',
        '''AI-Sweden/gpt-sw3-350m''': '''https://huggingface.co/AI-Sweden/gpt-sw3-350m/resolve/main/spiece.model''',
        '''AI-Sweden/gpt-sw3-1.6b''': '''https://huggingface.co/AI-Sweden/gpt-sw3-1.6b/resolve/main/spiece.model''',
        '''AI-Sweden/gpt-sw3-6.7b''': '''https://huggingface.co/AI-Sweden/gpt-sw3-6.7b/resolve/main/spiece.model''',
        '''AI-Sweden/gpt-sw3-20b''': '''https://huggingface.co/AI-Sweden/gpt-sw3-20b/resolve/main/spiece.model''',
    }
}

__A	=					{
    '''AI-Sweden/gpt-sw3-126m''': 2048,
    '''AI-Sweden/gpt-sw3-350m''': 2048,
    '''AI-Sweden/gpt-sw3-1.6b''': 2048,
    '''AI-Sweden/gpt-sw3-6.7b''': 2048,
    '''AI-Sweden/gpt-sw3-20b''': 2048,
}
class 			_snake_case  (       _lowercase		):
						snake_case__      	=      VOCAB_FILES_NAMES
						snake_case__      	=      PRETRAINED_VOCAB_FILES_MAP
						snake_case__      	=      PRETRAINED_POSITIONAL_EMBEDDINGS_SIZES
						snake_case__      	=      ['''input_ids''', '''attention_mask''']






						def __init__(							self   :      Tuple				,       UpperCAmelCase   :      Any				,       UpperCAmelCase   :      int=False				,       UpperCAmelCase   :      List[Any]=False				,       UpperCAmelCase   :      Optional[int]=False				,       UpperCAmelCase   :      Union[str, Any]=None				,       UpperCAmelCase   :      Tuple=None				,       UpperCAmelCase   :      Any=None				,       UpperCAmelCase   :      int=None				,       UpperCAmelCase   :      Optional[Dict[str, Any]] = None				,       **UpperCAmelCase   :      Tuple				,       ):
													__lowerCamelCase       :		Dict		 =  {} if sp_model_kwargs is None else sp_model_kwargs

													__lowerCamelCase       :		List[Any]		 =  kwargs.get("name_or_path"     )
													if name_or_path is None:
																				logger.warning(
																				    "name_or_path not provided, will work for all GPTSw3 models except gpt-sw3-7b,"
																				    " you are testing the model, this can safely be ignored"     )
																				__lowerCamelCase       :		Optional[int]		 =  "None"

													# Default definitions for our 2 tokenizer versions, with None-checks to enable proper testing
													__lowerCamelCase       :		Any		 =  "<|endoftext|>" if eos_token is None else eos_token
													__lowerCamelCase       :		Union[str, Any]		 =  "<unk>" if unk_token is None else unk_token
													if "gpt-sw3-7b" in name_or_path:
																				__lowerCamelCase       :		int		 =  unk_token if pad_token is None else pad_token
																				__lowerCamelCase       :		Optional[int]		 =  eos_token if bos_token is None else bos_token
													else:
																				__lowerCamelCase       :		Tuple		 =  "<pad>" if pad_token is None else pad_token
																				__lowerCamelCase       :		Tuple		 =  "<s>" if bos_token is None else bos_token

													super().__init__(
													    do_lower_case=A_				,       remove_space=A_				,       keep_accents=A_				,       bos_token=A_				,       eos_token=A_				,       unk_token=A_				,       pad_token=A_				,       sp_model_kwargs=self.sp_model_kwargs				,       **A_				,       )

													__lowerCamelCase       :		int		 =  do_lower_case
													__lowerCamelCase       :		List[str]		 =  remove_space
													__lowerCamelCase       :		Optional[int]		 =  keep_accents
													__lowerCamelCase       :		List[str]		 =  vocab_file

													__lowerCamelCase       :		str		 =  spm.SentencePieceProcessor(**self.sp_model_kwargs     )
													self.sp_model.Load(A_     )

													# Used for whitespace normalization in input texts
													# fmt : off
													__lowerCamelCase       :		Optional[Any]		 =  {" ", " ", " ", " ", " ", "　", " ", " ", " ", " ", "￼", ""}
													# fmt : on

													# Regular expression to remove non-printing characters (e.g. some unicode control chars) in preprocessing
													__lowerCamelCase       :		int		 =  re.compile(
													    F"""[{"".join(map(A_				,       list(range(0				,       9     )     ) + list(range(11				,       32     )     ) + list(range(127				,       160     )     ) + [160, 173, 8203]     )     )}]"""     )






						def __getstate__(							self   :      Optional[Any]     ):
													__lowerCamelCase       :		Any		 =  self.__dict__.copy()
													__lowerCamelCase       :		Dict		 =  None
													return state






						def __setstate__(							self   :      Dict				,       UpperCAmelCase   :      List[str]     ):
													__lowerCamelCase       :		Optional[Any]		 =  d

													# for backward compatibility
													if not hasattr(self				,       "sp_model_kwargs"     ):
																				__lowerCamelCase       :		Optional[int]		 =  {}

													__lowerCamelCase       :		Optional[Any]		 =  spm.SentencePieceProcessor(**self.sp_model_kwargs     )
													self.sp_model.Load(self.vocab_file     )






						@property
						# Copied from transformers.models.albert.tokenization_albert.AlbertTokenizer.vocab_size
						def    lowerCamelCase__  (							self   :      Union[str, Any]     ):
													return len(self.sp_model     )






						def    lowerCamelCase__  (							self   :      Dict				,       UpperCAmelCase   :      str     ):
													__lowerCamelCase       :		Any		 =  self.non_printing_characters_re.sub(""				,       A_     )

													# Normalize whitespaces
													__lowerCamelCase       :		str		 =  "".join([char if char not in self.whitespaces else " " for char in text]     )

													# NFC Unicode normalization
													__lowerCamelCase       :		Any		 =  unicodedata.normalize("NFC"				,       A_     )
													return text






						def    lowerCamelCase__  (							self   :      Any				,       UpperCAmelCase   :      str				,       **UpperCAmelCase   :      Any     ):
													__lowerCamelCase       :		Optional[int]		 =  self.preprocess_text(A_     )
													return self.sp_model.encode(A_				,       out_type=A_     )






						def    lowerCamelCase__  (							self   :      Union[str, Any]				,       UpperCAmelCase   :      str     ):
													return self.sp_model.PieceToId(A_     )






						def    lowerCamelCase__  (							self   :      Any				,       UpperCAmelCase   :      int     ):
													return self.sp_model.IdToPiece(A_     )






						@staticmethod
						def    lowerCamelCase__  (							UpperCAmelCase   :      str     ):
													return out_string






						def    lowerCamelCase__  (							self   :      Optional[Any]				,       UpperCAmelCase   :      List[str]     ):
													__lowerCamelCase       :		Any		 =  []
													__lowerCamelCase       :		Dict		 =  ""
													__lowerCamelCase       :		Any		 =  False
													for token in tokens:
																				# make sure that special tokens are not decoded using sentencepiece model
																				if token in self.all_special_tokens:
																											# TODO: Check if this is needed, as it ensures that decode(encode(doc)) != doc by adding extra whitespace in the decoded document
																											if not prev_is_special:
																																		out_string += " "

																											out_string += self.sp_model.decode(A_     ) + token
																											__lowerCamelCase       :		List[Any]		 =  True
																											__lowerCamelCase       :		int		 =  []
																				else:
																											current_sub_tokens.append(A_     )
																											__lowerCamelCase       :		List[Any]		 =  False
													out_string += self.sp_model.decode(A_     )

													return out_string






						def    lowerCamelCase__  (							self   :      Tuple     ):
													__lowerCamelCase       :		List[str]		 =  {self.convert_ids_to_tokens(A_     ): i for i in range(self.vocab_size     )}
													vocab.update(self.added_tokens_encoder     )
													return vocab






						def    lowerCamelCase__  (							self   :      str				,       UpperCAmelCase   :      str				,       UpperCAmelCase   :      Optional[str] = None     ):
													if not os.path.isdir(A_     ):
																				logger.error(F"""Vocabulary path ({save_directory}) should be a directory"""     )
																				return
													__lowerCamelCase       :		Optional[Any]		 =  os.path.join(
													    A_				,       (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"]     )

													if os.path.abspath(self.vocab_file     ) != os.path.abspath(A_     ) and os.path.isfile(self.vocab_file     ):
																				copyfile(self.vocab_file				,       A_     )
													elif not os.path.isfile(self.vocab_file     ):
																				with open(A_				,       "wb"     ) as fi:
																											__lowerCamelCase       :		List[str]		 =  self.sp_model.serialized_model_proto()
																											fi.write(A_     )

													return (out_vocab_file,)






						def    lowerCamelCase__  (							self   :      Optional[int]				,       UpperCAmelCase   :      Union[str, List[str]]				,       UpperCAmelCase   :      Union[str, bool] = False     ):

													if isinstance(A_				,       A_     ):
																				__lowerCamelCase       :		Union[str, Any]		 =  self.preprocess_text(A_     )
																				__lowerCamelCase       :		List[str]		 =  self.sp_model.encode(A_     )
													else:
																				__lowerCamelCase       :		int		 =  [self.preprocess_text(A_     ) for t in text]
																				__lowerCamelCase       :		Union[str, Any]		 =  self.sp_model.encode(A_     )

													if return_tensors is True or return_tensors == "pt":
																				__lowerCamelCase       :		Dict		 =  torch.tensor(A_     )

													return token_ids






						def    lowerCamelCase__  (							self   :      List[Any]				,       UpperCAmelCase   :      Union[int, List[int]]     ):
													return self.sp_model.decode(A_     )







						def    lowerCamelCase__  (							self   :      Optional[Any]				,       UpperCAmelCase   :      "Conversation"     ):
													__lowerCamelCase       :		List[str]		 =  [F"""User: {text}""" if is_user else F"""Bot: {text}""" for is_user, text in conversation.iter_texts()]
													__lowerCamelCase       :		List[Any]		 =  (
													    F"""{self.eos_token}{self.bos_token}""" + F"""{self.bos_token}""".join(A_     ) + F"""{self.bos_token}Bot:"""
													)
													return self.encode(text=A_     )

"""simple docstring"""


import unittest

from parameterized import parameterized

from transformers import LlamaConfig, is_torch_available, set_seed
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 LlamaForCausalLM, LlamaForSequenceClassification, LlamaModel, LlamaTokenizer







class 					lowerCAmelCase_					:



						'''simple docstring'''


						def __init__(			self  :   Tuple	,A_  :   Any	,A_  :   int=13	,A_  :   str=7	,A_  :   Tuple=True	,A_  :   str=True	,A_  :   str=False	,A_  :   List[str]=True	,A_  :   str=99	,A_  :   str=32	,A_  :   Optional[int]=5	,A_  :   Optional[Any]=4	,A_  :   str=37	,A_  :   Optional[Any]="gelu"	,A_  :   Union[str, Any]=0.1	,A_  :   Any=0.1	,A_  :   Optional[Any]=512	,A_  :   str=16	,A_  :   int=2	,A_  :   Optional[Any]=0.02	,A_  :   str=3	,A_  :   str=4	,A_  :   List[str]=None	,)  -> str:
							A     = parent
							A     = batch_size
							A     = seq_length
							A     = is_training
							A     = use_input_mask
							A     = use_token_type_ids
							A     = use_labels
							A     = vocab_size
							A     = hidden_size
							A     = num_hidden_layers
							A     = num_attention_heads
							A     = intermediate_size
							A     = hidden_act
							A     = hidden_dropout_prob
							A     = attention_probs_dropout_prob
							A     = max_position_embeddings
							A     = type_vocab_size
							A     = type_sequence_label_size
							A     = initializer_range
							A     = num_labels
							A     = num_choices
							A     = scope


						def     _SCREAMING_SNAKE_CASE   (			self  :   List[Any]   )  -> Any:
							A     = ids_tensor([self.batch_size, self.seq_length]	,self.vocab_size   )

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

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

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

							A     = self.get_config()

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


						def     _SCREAMING_SNAKE_CASE   (			self  :   Optional[Any]   )  -> Any:
							return LlamaConfig(
							    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=A_	,initializer_range=self.initializer_range	,)


						def     _SCREAMING_SNAKE_CASE   (			self  :   Any	,A_  :   Dict	,A_  :   Optional[int]	,A_  :   Any	,A_  :   Optional[Any]	,A_  :   Any	,A_  :   Union[str, Any]	,A_  :   Tuple   )  -> List[Any]:
							A     = LlamaModel(config=A_   )
							model.to(A_   )
							model.eval()
							A     = model(A_	,attention_mask=A_   )
							A     = model(A_   )
							self.parent.assertEqual(result.last_hidden_state.shape	,(self.batch_size, self.seq_length, self.hidden_size)   )


						def     _SCREAMING_SNAKE_CASE   (			self  :   Tuple	,A_  :   int	,A_  :   Optional[Any]	,A_  :   Optional[int]	,A_  :   Any	,A_  :   Union[str, Any]	,A_  :   Any	,A_  :   Tuple	,A_  :   Union[str, Any]	,A_  :   Dict	,)  -> List[str]:
							A     = True
							A     = LlamaModel(A_   )
							model.to(A_   )
							model.eval()
							A     = model(
							    A_	,attention_mask=A_	,encoder_hidden_states=A_	,encoder_attention_mask=A_	,)
							A     = model(
							    A_	,attention_mask=A_	,encoder_hidden_states=A_	,)
							A     = model(A_	,attention_mask=A_   )
							self.parent.assertEqual(result.last_hidden_state.shape	,(self.batch_size, self.seq_length, self.hidden_size)   )


						def     _SCREAMING_SNAKE_CASE   (			self  :   int	,A_  :   List[str]	,A_  :   Optional[int]	,A_  :   Any	,A_  :   str	,A_  :   Dict	,A_  :   Dict	,A_  :   Tuple	,A_  :   Tuple	,A_  :   Dict	,)  -> Union[str, Any]:
							A     = LlamaForCausalLM(config=A_   )
							model.to(A_   )
							model.eval()
							A     = model(A_	,attention_mask=A_	,labels=A_   )
							self.parent.assertEqual(result.logits.shape	,(self.batch_size, self.seq_length, self.vocab_size)   )


						def     _SCREAMING_SNAKE_CASE   (			self  :   int	,A_  :   Dict	,A_  :   Any	,A_  :   int	,A_  :   List[str]	,A_  :   Tuple	,A_  :   Any	,A_  :   Union[str, Any]	,A_  :   Any	,A_  :   int	,)  -> List[Any]:
							A     = True
							A     = True
							A     = LlamaForCausalLM(config=A_   )
							model.to(A_   )
							model.eval()

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

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

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

							A     = model(
							    A_	,attention_mask=A_	,encoder_hidden_states=A_	,encoder_attention_mask=A_	,output_hidden_states=A_	,)['hidden_states'][0]
							A     = model(
							    A_	,attention_mask=A_	,encoder_hidden_states=A_	,encoder_attention_mask=A_	,past_key_values=A_	,output_hidden_states=A_	,)['hidden_states'][0]

							# select random slice
							A     = ids_tensor((1,)	,output_from_past.shape[-1]   ).item()
							A     = output_from_no_past[:, -3:, random_slice_idx].detach()
							A     = 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(A_	,A_	,atol=1e-3   )   )




						def     _SCREAMING_SNAKE_CASE   (			self  :   Any   )  -> Optional[int]:
							A     = self.prepare_config_and_inputs()
							(
							    (
							    A
							) ,   (
							    A
							) ,   (
							    A
							) ,   (
							    A
							) ,   (
							    A
							) ,   (
							    A
							) ,   (
							    A
							) ,   
							)     = config_and_inputs
							A     = {'input_ids': input_ids, 'attention_mask': input_mask}
							return config, inputs_dict







@require_torch
class 					lowerCAmelCase_					(   _lowercase		,       _lowercase		,       _lowercase		,       unittest.TestCase     ):



						'''simple docstring'''


						_lowerCamelCase:     Dict   =     (LlamaModel, LlamaForCausalLM, LlamaForSequenceClassification) if is_torch_available() else ()
						_lowerCamelCase:     List[Any]   =     (LlamaForCausalLM,) if is_torch_available() else ()
						_lowerCamelCase:     Any   =     (
						    {
						        '''feature-extraction''': LlamaModel,
						        '''text-classification''': LlamaForSequenceClassification,
						        '''text-generation''': LlamaForCausalLM,
						        '''zero-shot''': LlamaForSequenceClassification,
						    }
						    if is_torch_available()
						    else {}
						)
						_lowerCamelCase:     int   =     False
						_lowerCamelCase:     List[str]   =     False


						def     _SCREAMING_SNAKE_CASE   (			self  :   Any   )  -> Dict:
							A     = LlamaModelTester(self   )
							A     = ConfigTester(self	,config_class=A_	,hidden_size=37   )


						def     _SCREAMING_SNAKE_CASE   (			self  :   Union[str, Any]   )  -> Any:
							self.config_tester.run_common_tests()


						def     _SCREAMING_SNAKE_CASE   (			self  :   List[Any]   )  -> Tuple:
							A     = self.model_tester.prepare_config_and_inputs()
							self.model_tester.create_and_check_model(*A_   )


						def     _SCREAMING_SNAKE_CASE   (			self  :   str   )  -> Optional[int]:
							A     = self.model_tester.prepare_config_and_inputs()
							for type in ["absolute", "relative_key", "relative_key_query"]:
								A     = type
								self.model_tester.create_and_check_model(*A_   )


						def     _SCREAMING_SNAKE_CASE   (			self  :   List[Any]   )  -> List[Any]:
							A ,   A     = self.model_tester.prepare_config_and_inputs_for_common()
							A     = 3
							A     = input_dict['input_ids']
							A     = input_ids.ne(1   ).to(A_   )
							A     = ids_tensor([self.model_tester.batch_size]	,self.model_tester.type_sequence_label_size   )
							A     = LlamaForSequenceClassification(A_   )
							model.to(A_   )
							model.eval()
							A     = model(A_	,attention_mask=A_	,labels=A_   )
							self.assertEqual(result.logits.shape	,(self.model_tester.batch_size, self.model_tester.num_labels)   )


						def     _SCREAMING_SNAKE_CASE   (			self  :   int   )  -> Optional[Any]:
							A ,   A     = self.model_tester.prepare_config_and_inputs_for_common()
							A     = 3
							A     = 'single_label_classification'
							A     = input_dict['input_ids']
							A     = input_ids.ne(1   ).to(A_   )
							A     = ids_tensor([self.model_tester.batch_size]	,self.model_tester.type_sequence_label_size   )
							A     = LlamaForSequenceClassification(A_   )
							model.to(A_   )
							model.eval()
							A     = model(A_	,attention_mask=A_	,labels=A_   )
							self.assertEqual(result.logits.shape	,(self.model_tester.batch_size, self.model_tester.num_labels)   )


						def     _SCREAMING_SNAKE_CASE   (			self  :   str   )  -> Dict:
							A ,   A     = self.model_tester.prepare_config_and_inputs_for_common()
							A     = 3
							A     = 'multi_label_classification'
							A     = input_dict['input_ids']
							A     = input_ids.ne(1   ).to(A_   )
							A     = ids_tensor(
							    [self.model_tester.batch_size, config.num_labels]	,self.model_tester.type_sequence_label_size   ).to(torch.float   )
							A     = LlamaForSequenceClassification(A_   )
							model.to(A_   )
							model.eval()
							A     = model(A_	,attention_mask=A_	,labels=A_   )
							self.assertEqual(result.logits.shape	,(self.model_tester.batch_size, self.model_tester.num_labels)   )


						@unittest.skip('LLaMA buffers include complex numbers, which breaks this test'   )
						def     _SCREAMING_SNAKE_CASE   (			self  :   Dict   )  -> Optional[Any]:
							pass




						@parameterized.expand([('linear',), ('dynamic',)]   )
						def     _SCREAMING_SNAKE_CASE   (			self  :   List[Any]	,A_  :   Any   )  -> str:
							A ,   A     = self.model_tester.prepare_config_and_inputs_for_common()
							A     = ids_tensor([1, 10]	,config.vocab_size   )
							A     = ids_tensor([1, int(config.max_position_embeddings * 1.5   )]	,config.vocab_size   )

							set_seed(42   )  # Fixed seed at init time so the two models get the same random weights
							A     = LlamaModel(A_   )
							original_model.to(A_   )
							original_model.eval()
							A     = original_model(A_   ).last_hidden_state
							A     = original_model(A_   ).last_hidden_state

							set_seed(42   )  # Fixed seed at init time so the two models get the same random weights
							A     = {'type': scaling_type, 'factor': 10.0}
							A     = LlamaModel(A_   )
							scaled_model.to(A_   )
							scaled_model.eval()
							A     = scaled_model(A_   ).last_hidden_state
							A     = scaled_model(A_   ).last_hidden_state

							# Dynamic scaling does not change the RoPE embeddings until it receives an input longer than the original
							# maximum sequence length, so the outputs for the short input should match.
							if scaling_type == "dynamic":
								self.assertTrue(torch.allclose(A_	,A_	,atol=1e-5   )   )
							else:
								self.assertFalse(torch.allclose(A_	,A_	,atol=1e-5   )   )

							# The output should be different for long inputs
							self.assertFalse(torch.allclose(A_	,A_	,atol=1e-5   )   )







@require_torch
class 					lowerCAmelCase_					(   unittest.TestCase     ):



						'''simple docstring'''


						@unittest.skip('Logits are not exactly the same, once we fix the instabalities somehow, will update!'   )
						@slow
						def     _SCREAMING_SNAKE_CASE   (			self  :   List[str]   )  -> Optional[Any]:
							A     = [1, 306, 4658, 278, 6593, 310, 2834, 338]
							A     = LlamaForCausalLM.from_pretrained('meta-llama/Llama-2-7b-hf'	,device_map='auto'   )
							A     = model(torch.tensor([input_ids]   )   )
							# Expected mean on dim = -1
							A     = torch.tensor([[-6.65_50, -4.12_27, -4.98_59, -3.24_06, 0.82_62, -3.00_33, 1.29_64, -3.36_99]]   )
							torch.testing.assert_close(out.mean(-1   )	,A_	,atol=1e-2	,rtol=1e-2   )
							# slicing logits[0, 0, 0:30]
							# fmt: off
							A     = torch.tensor([-12.82_81, -7.44_53, -0.46_39, -8.06_25, -7.25_00, -8.00_00, -6.48_83, -7.76_95, -7.84_38, -7.03_12, -6.21_88, -7.13_28, -1.84_96, 1.99_61, -8.62_50, -6.72_27, -12.82_81, -6.94_92, -7.07_42, -7.78_52, -7.58_20, -7.90_62, -6.93_75, -7.98_05, -8.34_38, -8.15_62, -8.04_69, -7.62_50, -7.74_22, -7.33_98,]   )
							# fmt: on
							torch.testing.assert_close(out[0, 0, :30]	,A_	,atol=1e-5	,rtol=1e-5   )


						@unittest.skip('Logits are not exactly the same, once we fix the instabalities somehow, will update!'   )
						@slow
						def     _SCREAMING_SNAKE_CASE   (			self  :   Any   )  -> int:
							A     = [1, 306, 4658, 278, 6593, 310, 2834, 338]
							A     = LlamaForCausalLM.from_pretrained('meta-llama/Llama-2-13b-hf'	,device_map='auto'   )
							A     = model(torch.tensor(A_   )   )
							# Expected mean on dim = -1
							A     = torch.tensor([[-2.06_22, -1.27_94, -1.16_38, -0.97_88, -1.46_03, -1.02_38, -1.78_93, -1.44_11]]   )
							torch.testing.assert_close(out.mean(-1   )	,A_	,atol=1e-2	,rtol=1e-2   )
							# slicing logits[0, 0, 0:30]
							# fmt: off
							A     = torch.tensor([-8.14_06, -8.05_47, 2.74_61, -1.23_44, -0.14_48, -1.82_62, -1.00_20, -1.81_54, -1.68_95, -1.85_16, -2.35_74, -0.92_77, 3.75_98, 6.57_42, -1.29_98, -0.11_77, -8.14_06, -2.96_88, -2.91_99, -3.16_99, -3.52_54, -2.35_55, -2.79_88, -3.41_41, -2.82_62, -4.51_95, -3.33_79, -3.31_64, -2.78_32, -3.02_73]   )
							# fmt: on
							torch.testing.assert_close(out[0, 0, :30]	,A_	,atol=1e-5	,rtol=1e-5   )


						@unittest.skip('Logits are not exactly the same, once we fix the instabalities somehow, will update!'   )
						@slow
						def     _SCREAMING_SNAKE_CASE   (			self  :   int   )  -> str:
							A     = [1, 306, 4658, 278, 6593, 310, 2834, 338]
							A     = LlamaForCausalLM.from_pretrained('meta-llama/Llama-2-13b-chat-hf'	,device_map='auto'   )
							A     = model(torch.tensor(A_   )   )
							# Expected mean on dim = -1
							A     = torch.tensor([[-0.85_62, -1.85_20, -0.75_51, -0.41_62, -1.51_61, -1.20_38, -2.48_23, -2.32_54]]   )
							torch.testing.assert_close(out.mean(-1   )	,A_	,atol=1e-2	,rtol=1e-2   )
							# slicing logits[0, 0, 0:30]
							# fmt: off
							A     = torch.tensor([-2.22_27, 4.88_28, 0.90_23, -0.45_78, -0.78_71, -0.10_33, -0.62_21, -0.57_86, -0.78_03, -1.06_74, -1.29_20, -0.15_70, 0.80_08, 2.07_23, -0.94_97, 0.27_71, -2.22_27, -0.76_12, -1.43_46, -1.20_61, -1.64_26, -0.30_00, -0.71_39, -1.19_34, -1.86_91, -1.69_73, -1.59_47, -1.27_05, -0.35_23, -0.55_13]   )
							# fmt: on
							torch.testing.assert_close(out.mean(-1   )	,A_	,atol=1e-2	,rtol=1e-2   )


						@unittest.skip(
						    'Logits are not exactly the same, once we fix the instabalities somehow, will update! Also it is gonna be a `too_slow` test'   )
						@slow
						def     _SCREAMING_SNAKE_CASE   (			self  :   Any   )  -> str:
							A     = [1, 306, 4658, 278, 6593, 310, 2834, 338]
							A     = LlamaForCausalLM.from_pretrained('meta-llama/Llama-2-70b-hf'	,device_map='auto'   )
							A     = model(torch.tensor(A_   )   )

							A     = torch.tensor(
							    [[-4.23_27, -3.33_60, -4.66_65, -4.76_31, -1.81_80, -3.41_70, -1.42_11, -3.18_10]]	,dtype=torch.floataa   )
							torch.testing.assert_close(out.mean(-1   )	,A_	,atol=1e-2	,rtol=1e-2   )
							# fmt: off
							A     = torch.tensor([-9.49_22, -3.95_51, 1.79_98, -5.67_58, -5.10_55, -5.89_84, -4.83_20, -6.80_86, -6.53_91, -5.61_72, -5.58_20, -5.53_52, 1.78_81, 3.62_89, -6.51_17, -3.47_85, -9.50_00, -6.03_52, -6.81_25, -6.01_95, -6.68_36, -5.47_27, -6.28_12, -6.03_91, -7.33_98, -7.42_97, -7.48_44, -6.58_20, -5.87_89, -5.53_12]   )
							# fmt: on
							torch.testing.assert_close(out[0, 0, :30]	,A_	,atol=1e-5	,rtol=1e-5   )




						@unittest.skip('Model is curently gated'   )
						@slow
						def     _SCREAMING_SNAKE_CASE   (			self  :   int   )  -> Tuple:
							A     = 'Simply put, the theory of relativity states that 1) the laws of physics are the same everywhere in the universe and 2) the passage of time and the length of objects can vary depending on the observer\'s frame of reference.\n\nThe first part of the theory, that the laws of physics are the same everywhere, is known as the "princi'
							A     = 'Simply put, the theory of relativity states that '
							A     = LlamaTokenizer.from_pretrained('meta-llama/Llama-2-13b-chat-hf'   )
							A     = tokenizer.encode(A_	,return_tensors='pt'   )
							A     = LlamaForCausalLM.from_pretrained(
							    'meta-llama/Llama-2-13b-chat-hf'	,device_map='sequential'	,use_safetensors=A_   )

							# greedy generation outputs
							A     = model.generate(A_	,max_new_tokens=64	,top_p=A_	,temperature=1	,do_sample=A_   )
							A     = tokenizer.decode(generated_ids[0]	,skip_special_tokens=A_   )
							self.assertEqual(A_	,A_   )