
'''simple docstring'''



import unittest

from parameterized import parameterized

from transformers import OpenLlamaConfig, is_torch_available, set_seed
from transformers.testing_utils import require_torch, 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 OpenLlamaForCausalLM, OpenLlamaForSequenceClassification, OpenLlamaModel




class   UpperCAmelCase_					:






						'''simple docstring'''






						def __init__( self   ,       _lowercase   ,       _lowercase=13   ,       _lowercase=7   ,       _lowercase=True   ,       _lowercase=True   ,       _lowercase=False   ,       _lowercase=True   ,       _lowercase=99   ,       _lowercase=32   ,       _lowercase=5   ,       _lowercase=4   ,       _lowercase=37   ,       _lowercase="gelu"   ,       _lowercase=0.1   ,       _lowercase=0.1   ,       _lowercase=512   ,       _lowercase=16   ,       _lowercase=2   ,       _lowercase=0.02   ,       _lowercase=3   ,       _lowercase=4   ,       _lowercase=None   ,       ):

												"""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  _lowercase     ( self				):

												"""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  _lowercase     ( self				):

												"""simple docstring"""



												return OpenLlamaConfig(
												    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   ,       use_stable_embedding=_lowercase   ,       )




						def  _lowercase     ( self   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase				):

												"""simple docstring"""



												_lowerCAmelCase  						=			OpenLlamaModel(config=_lowercase				)
												model.to(_lowercase				)
												model.eval()
												_lowerCAmelCase  						=			model(_lowercase   ,       attention_mask=_lowercase				)
												_lowerCAmelCase  						=			model(_lowercase				)
												self.parent.assertEqual(result.last_hidden_state.shape   ,       (self.batch_size, self.seq_length, self.hidden_size)				)




						def  _lowercase     ( self   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       ):

												"""simple docstring"""



												_lowerCAmelCase  						=			True
												_lowerCAmelCase  						=			OpenLlamaModel(_lowercase				)
												model.to(_lowercase				)
												model.eval()
												_lowerCAmelCase  						=			model(
												    _lowercase   ,       attention_mask=_lowercase   ,       encoder_hidden_states=_lowercase   ,       encoder_attention_mask=_lowercase   ,       )
												_lowerCAmelCase  						=			model(
												    _lowercase   ,       attention_mask=_lowercase   ,       encoder_hidden_states=_lowercase   ,       )
												_lowerCAmelCase  						=			model(_lowercase   ,       attention_mask=_lowercase				)
												self.parent.assertEqual(result.last_hidden_state.shape   ,       (self.batch_size, self.seq_length, self.hidden_size)				)




						def  _lowercase     ( self   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       ):

												"""simple docstring"""



												_lowerCAmelCase  						=			OpenLlamaForCausalLM(config=_lowercase				)
												model.to(_lowercase				)
												model.eval()
												_lowerCAmelCase  						=			model(_lowercase   ,       attention_mask=_lowercase   ,       labels=_lowercase				)
												self.parent.assertEqual(result.logits.shape   ,       (self.batch_size, self.seq_length, self.vocab_size)				)




						def  _lowercase     ( self   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       _lowercase   ,       ):

												"""simple docstring"""



												_lowerCAmelCase  						=			True
												_lowerCAmelCase  						=			True
												_lowerCAmelCase  						=			OpenLlamaForCausalLM(config=_lowercase				)
												model.to(_lowercase				)
												model.eval()

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

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

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

												_lowerCAmelCase  						=			model(
												    _lowercase   ,       attention_mask=_lowercase   ,       encoder_hidden_states=_lowercase   ,       encoder_attention_mask=_lowercase   ,       output_hidden_states=_lowercase   ,       )["""hidden_states"""][0]
												_lowerCAmelCase  						=			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
												_lowerCAmelCase  						=			ids_tensor((1,)   ,       output_from_past.shape[-1]				).item()
												_lowerCAmelCase  						=			output_from_no_past[:, -3:, random_slice_idx].detach()
												_lowerCAmelCase  						=			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  _lowercase     ( self				):

												"""simple docstring"""



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






@require_torch
class   UpperCAmelCase_					(		_SCREAMING_SNAKE_CASE	,							_SCREAMING_SNAKE_CASE	,							_SCREAMING_SNAKE_CASE	,							unittest.TestCase			):






						'''simple docstring'''






						_lowercase		:				Union[str, Any]									=       (
						    (OpenLlamaModel, OpenLlamaForCausalLM, OpenLlamaForSequenceClassification) if is_torch_available() else ()
						)
						_lowercase		:				Any									=       (OpenLlamaForCausalLM,) if is_torch_available() else ()
						_lowercase		:				str									=       (
						    {
						        '''feature-extraction''': OpenLlamaModel,
						        '''text-classification''': OpenLlamaForSequenceClassification,
						        '''text-generation''': OpenLlamaForCausalLM,
						        '''zero-shot''': OpenLlamaForSequenceClassification,
						    }
						    if is_torch_available()
						    else {}
						)
						_lowercase		:				Tuple									=       False
						_lowercase		:				str									=       False




						def  _lowercase     ( self				):

												"""simple docstring"""



												_lowerCAmelCase  						=			OpenLlamaModelTester(self				)
												_lowerCAmelCase  						=			ConfigTester(self   ,       config_class=_lowercase   ,       hidden_size=37				)




						def  _lowercase     ( self				):

												"""simple docstring"""



												self.config_tester.run_common_tests()




						def  _lowercase     ( self				):

												"""simple docstring"""



												_lowerCAmelCase  						=			self.model_tester.prepare_config_and_inputs()
												self.model_tester.create_and_check_model(*_lowercase				)




						def  _lowercase     ( self				):

												"""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(*_lowercase				)




						def  _lowercase     ( self				):

												"""simple docstring"""



												_lowerCAmelCase						,   _lowerCAmelCase  						=			self.model_tester.prepare_config_and_inputs_for_common()
												_lowerCAmelCase  						=			3
												_lowerCAmelCase  						=			input_dict["""input_ids"""]
												_lowerCAmelCase  						=			input_ids.ne(1				).to(_lowercase				)
												_lowerCAmelCase  						=			ids_tensor([self.model_tester.batch_size]   ,       self.model_tester.type_sequence_label_size				)
												_lowerCAmelCase  						=			OpenLlamaForSequenceClassification(_lowercase				)
												model.to(_lowercase				)
												model.eval()
												_lowerCAmelCase  						=			model(_lowercase   ,       attention_mask=_lowercase   ,       labels=_lowercase				)
												self.assertEqual(result.logits.shape   ,       (self.model_tester.batch_size, self.model_tester.num_labels)				)




						def  _lowercase     ( self				):

												"""simple docstring"""



												_lowerCAmelCase						,   _lowerCAmelCase  						=			self.model_tester.prepare_config_and_inputs_for_common()
												_lowerCAmelCase  						=			3
												_lowerCAmelCase  						=			"""single_label_classification"""
												_lowerCAmelCase  						=			input_dict["""input_ids"""]
												_lowerCAmelCase  						=			input_ids.ne(1				).to(_lowercase				)
												_lowerCAmelCase  						=			ids_tensor([self.model_tester.batch_size]   ,       self.model_tester.type_sequence_label_size				)
												_lowerCAmelCase  						=			OpenLlamaForSequenceClassification(_lowercase				)
												model.to(_lowercase				)
												model.eval()
												_lowerCAmelCase  						=			model(_lowercase   ,       attention_mask=_lowercase   ,       labels=_lowercase				)
												self.assertEqual(result.logits.shape   ,       (self.model_tester.batch_size, self.model_tester.num_labels)				)




						def  _lowercase     ( self				):

												"""simple docstring"""



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




						@unittest.skip("""Open-Llama buffers include complex numbers, which breaks this test"""				)
						def  _lowercase     ( self				):

												"""simple docstring"""



												pass




						@parameterized.expand([("""linear""",), ("""dynamic""",)]				)
						def  _lowercase     ( self   ,       _lowercase				):

												"""simple docstring"""



												_lowerCAmelCase						,   _lowerCAmelCase  						=			self.model_tester.prepare_config_and_inputs_for_common()
												_lowerCAmelCase  						=			ids_tensor([1, 10]   ,       config.vocab_size				)
												_lowerCAmelCase  						=			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
												_lowerCAmelCase  						=			OpenLlamaModel(_lowercase				)
												original_model.to(_lowercase				)
												original_model.eval()
												_lowerCAmelCase  						=			original_model(_lowercase				).last_hidden_state
												_lowerCAmelCase  						=			original_model(_lowercase				).last_hidden_state

												set_seed(42				)  # Fixed seed at init time so the two models get the same random weights
												_lowerCAmelCase  						=			{"""type""": scaling_type, """factor""": 10.0}
												_lowerCAmelCase  						=			OpenLlamaModel(_lowercase				)
												scaled_model.to(_lowercase				)
												scaled_model.eval()
												_lowerCAmelCase  						=			scaled_model(_lowercase				).last_hidden_state
												_lowerCAmelCase  						=			scaled_model(_lowercase				).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(_lowercase   ,       _lowercase   ,       atol=1e-5				)				)
												else:
																		self.assertFalse(torch.allclose(_lowercase   ,       _lowercase   ,       atol=1e-5				)				)

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


'''simple docstring'''



from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


_lowercase    =		{
    """configuration_table_transformer""": [
        """TABLE_TRANSFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP""",
        """TableTransformerConfig""",
        """TableTransformerOnnxConfig""",
    ]
}

try:
						if not is_torch_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						_lowercase    =		[
						    """TABLE_TRANSFORMER_PRETRAINED_MODEL_ARCHIVE_LIST""",
						    """TableTransformerForObjectDetection""",
						    """TableTransformerModel""",
						    """TableTransformerPreTrainedModel""",
						]


if TYPE_CHECKING:
						from .configuration_table_transformer import (
						    TABLE_TRANSFORMER_PRETRAINED_CONFIG_ARCHIVE_MAP,
						    TableTransformerConfig,
						    TableTransformerOnnxConfig,
						)

						try:
												if not is_torch_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_table_transformer import (
												    TABLE_TRANSFORMER_PRETRAINED_MODEL_ARCHIVE_LIST,
												    TableTransformerForObjectDetection,
												    TableTransformerModel,
												    TableTransformerPreTrainedModel,
												)

else:
						import sys

						_lowercase    =		_LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)
