from __future__ import annotations

import unittest

from transformers import AlbertConfig, is_tf_available
from transformers.models.auto import get_values
from transformers.testing_utils import require_tf, slow

from ...test_configuration_common import ConfigTester
from ...test_modeling_tf_common import TFModelTesterMixin, ids_tensor, random_attention_mask
from ...test_pipeline_mixin import PipelineTesterMixin


if is_tf_available():
			import tensorflow as tf

			from transformers import TF_MODEL_FOR_PRETRAINING_MAPPING
			from transformers.models.albert.modeling_tf_albert import (
			    TF_ALBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
			    TFAlbertForMaskedLM,
			    TFAlbertForMultipleChoice,
			    TFAlbertForPreTraining,
			    TFAlbertForQuestionAnswering,
			    TFAlbertForSequenceClassification,
			    TFAlbertForTokenClassification,
			    TFAlbertModel,
			)

class 	_SCREAMING_SNAKE_CASE							:






		"""simple docstring"""







		def __init__(			self    :				Dict  ,					__SCREAMING_SNAKE_CASE    :				Union[str, Any]  ,					__SCREAMING_SNAKE_CASE    :				Tuple=13  ,					__SCREAMING_SNAKE_CASE    :				List[str]=7  ,					__SCREAMING_SNAKE_CASE    :				Dict=True  ,					__SCREAMING_SNAKE_CASE    :				Optional[Any]=True  ,					__SCREAMING_SNAKE_CASE    :				int=True  ,					__SCREAMING_SNAKE_CASE    :				Dict=True  ,					__SCREAMING_SNAKE_CASE    :				int=99  ,					__SCREAMING_SNAKE_CASE    :				Optional[int]=16  ,					__SCREAMING_SNAKE_CASE    :				Optional[int]=32  ,					__SCREAMING_SNAKE_CASE    :				Dict=2  ,					__SCREAMING_SNAKE_CASE    :				Tuple=4  ,					__SCREAMING_SNAKE_CASE    :				Any=37  ,					__SCREAMING_SNAKE_CASE    :				Dict="gelu"  ,					__SCREAMING_SNAKE_CASE    :				int=0.1  ,					__SCREAMING_SNAKE_CASE    :				List[Any]=0.1  ,					__SCREAMING_SNAKE_CASE    :				Tuple=512  ,					__SCREAMING_SNAKE_CASE    :				int=16  ,					__SCREAMING_SNAKE_CASE    :				str=2  ,					__SCREAMING_SNAKE_CASE    :				Union[str, Any]=0.0_2  ,					__SCREAMING_SNAKE_CASE    :				List[str]=3  ,					__SCREAMING_SNAKE_CASE    :				Any=4  ,					__SCREAMING_SNAKE_CASE    :				List[Any]=None  ,					):






					"""simple docstring"""
					_snake_case              =      parent
					_snake_case              =      13
					_snake_case              =      7
					_snake_case              =      True
					_snake_case              =      True
					_snake_case              =      True
					_snake_case              =      True
					_snake_case              =      99
					_snake_case              =      16
					_snake_case              =      32
					_snake_case              =      2
					_snake_case              =      4
					_snake_case              =      37
					_snake_case              =      "gelu"
					_snake_case              =      0.1
					_snake_case              =      0.1
					_snake_case              =      512
					_snake_case              =      16
					_snake_case              =      2
					_snake_case              =      0.0_2
					_snake_case              =      3
					_snake_case              =      4
					_snake_case              =      None



		def 				_a				(			self    :				Any   ):






					"""simple docstring"""
					_snake_case              =      ids_tensor([self.batch_size, self.seq_length]  ,					self.vocab_size   )

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

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

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

					_snake_case              =      AlbertConfig(
					    vocab_size=self.vocab_size  ,					hidden_size=self.hidden_size  ,					embedding_size=self.embedding_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  ,					initializer_range=self.initializer_range  ,					)

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



		def 				_a				(			self    :				Any  ,					__SCREAMING_SNAKE_CASE    :				Optional[Any]  ,					__SCREAMING_SNAKE_CASE    :				str  ,					__SCREAMING_SNAKE_CASE    :				Any  ,					__SCREAMING_SNAKE_CASE    :				Optional[int]  ,					__SCREAMING_SNAKE_CASE    :				Optional[int]  ,					__SCREAMING_SNAKE_CASE    :				Any  ,					__SCREAMING_SNAKE_CASE    :				List[Any]   ):






					"""simple docstring"""
					_snake_case              =      TFAlbertModel(config=__SCREAMING_SNAKE_CASE   )
					# inputs = {'input_ids': input_ids,
					#           'attention_mask': input_mask,
					#           'token_type_ids': token_type_ids}
					# sequence_output, pooled_output = model(**inputs)
					_snake_case              =      {"input_ids": input_ids, "attention_mask": input_mask, "token_type_ids": token_type_ids}
					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )

					_snake_case              =      [input_ids, input_mask]
					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )

					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )

					self.parent.assertEqual(result.last_hidden_state.shape  ,					(self.batch_size, self.seq_length, self.hidden_size)   )
					self.parent.assertEqual(result.pooler_output.shape  ,					(self.batch_size, self.hidden_size)   )



		def 				_a				(			self    :				Optional[int]  ,					__SCREAMING_SNAKE_CASE    :				List[Any]  ,					__SCREAMING_SNAKE_CASE    :				Tuple  ,					__SCREAMING_SNAKE_CASE    :				Optional[int]  ,					__SCREAMING_SNAKE_CASE    :				Union[str, Any]  ,					__SCREAMING_SNAKE_CASE    :				List[Any]  ,					__SCREAMING_SNAKE_CASE    :				Dict  ,					__SCREAMING_SNAKE_CASE    :				Dict   ):






					"""simple docstring"""
					_snake_case              =      self.num_labels
					_snake_case              =      TFAlbertForPreTraining(config=__SCREAMING_SNAKE_CASE   )
					_snake_case              =      {"input_ids": input_ids, "attention_mask": input_mask, "token_type_ids": token_type_ids}
					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )
					self.parent.assertEqual(result.prediction_logits.shape  ,					(self.batch_size, self.seq_length, self.vocab_size)   )
					self.parent.assertEqual(result.sop_logits.shape  ,					(self.batch_size, self.num_labels)   )



		def 				_a				(			self    :				List[str]  ,					__SCREAMING_SNAKE_CASE    :				Any  ,					__SCREAMING_SNAKE_CASE    :				str  ,					__SCREAMING_SNAKE_CASE    :				List[str]  ,					__SCREAMING_SNAKE_CASE    :				List[Any]  ,					__SCREAMING_SNAKE_CASE    :				str  ,					__SCREAMING_SNAKE_CASE    :				Optional[Any]  ,					__SCREAMING_SNAKE_CASE    :				Optional[Any]   ):






					"""simple docstring"""
					_snake_case              =      TFAlbertForMaskedLM(config=__SCREAMING_SNAKE_CASE   )
					_snake_case              =      {"input_ids": input_ids, "attention_mask": input_mask, "token_type_ids": token_type_ids}
					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )
					self.parent.assertEqual(result.logits.shape  ,					(self.batch_size, self.seq_length, self.vocab_size)   )



		def 				_a				(			self    :				List[Any]  ,					__SCREAMING_SNAKE_CASE    :				Optional[Any]  ,					__SCREAMING_SNAKE_CASE    :				Optional[Any]  ,					__SCREAMING_SNAKE_CASE    :				str  ,					__SCREAMING_SNAKE_CASE    :				Optional[Any]  ,					__SCREAMING_SNAKE_CASE    :				int  ,					__SCREAMING_SNAKE_CASE    :				str  ,					__SCREAMING_SNAKE_CASE    :				Union[str, Any]   ):






					"""simple docstring"""
					_snake_case              =      self.num_labels
					_snake_case              =      TFAlbertForSequenceClassification(config=__SCREAMING_SNAKE_CASE   )
					_snake_case              =      {"input_ids": input_ids, "attention_mask": input_mask, "token_type_ids": token_type_ids}
					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )
					self.parent.assertEqual(result.logits.shape  ,					(self.batch_size, self.num_labels)   )



		def 				_a				(			self    :				Tuple  ,					__SCREAMING_SNAKE_CASE    :				List[Any]  ,					__SCREAMING_SNAKE_CASE    :				str  ,					__SCREAMING_SNAKE_CASE    :				int  ,					__SCREAMING_SNAKE_CASE    :				Any  ,					__SCREAMING_SNAKE_CASE    :				str  ,					__SCREAMING_SNAKE_CASE    :				Tuple  ,					__SCREAMING_SNAKE_CASE    :				str   ):






					"""simple docstring"""
					_snake_case              =      TFAlbertForQuestionAnswering(config=__SCREAMING_SNAKE_CASE   )
					_snake_case              =      {"input_ids": input_ids, "attention_mask": input_mask, "token_type_ids": token_type_ids}
					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )
					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 				_a				(			self    :				Optional[int]  ,					__SCREAMING_SNAKE_CASE    :				int  ,					__SCREAMING_SNAKE_CASE    :				str  ,					__SCREAMING_SNAKE_CASE    :				int  ,					__SCREAMING_SNAKE_CASE    :				Optional[int]  ,					__SCREAMING_SNAKE_CASE    :				Dict  ,					__SCREAMING_SNAKE_CASE    :				Union[str, Any]  ,					__SCREAMING_SNAKE_CASE    :				List[Any]   ):






					"""simple docstring"""
					_snake_case              =      self.num_choices
					_snake_case              =      TFAlbertForMultipleChoice(config=__SCREAMING_SNAKE_CASE   )
					_snake_case              =      tf.tile(tf.expand_dims(__SCREAMING_SNAKE_CASE  ,					1   )  ,					(1, self.num_choices, 1)   )
					_snake_case              =      tf.tile(tf.expand_dims(__SCREAMING_SNAKE_CASE  ,					1   )  ,					(1, self.num_choices, 1)   )
					_snake_case              =      tf.tile(tf.expand_dims(__SCREAMING_SNAKE_CASE  ,					1   )  ,					(1, self.num_choices, 1)   )
					_snake_case              =      {
					    "input_ids": multiple_choice_inputs_ids,
					    "attention_mask": multiple_choice_input_mask,
					    "token_type_ids": multiple_choice_token_type_ids,
					}
					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )
					self.parent.assertListEqual(list(result["logits"].shape   )  ,					[self.batch_size, self.num_choices]   )



		def 				_a				(			self    :				str  ,					__SCREAMING_SNAKE_CASE    :				int  ,					__SCREAMING_SNAKE_CASE    :				Union[str, Any]  ,					__SCREAMING_SNAKE_CASE    :				Tuple  ,					__SCREAMING_SNAKE_CASE    :				Dict  ,					__SCREAMING_SNAKE_CASE    :				Union[str, Any]  ,					__SCREAMING_SNAKE_CASE    :				Tuple  ,					__SCREAMING_SNAKE_CASE    :				List[Any]   ):






					"""simple docstring"""
					_snake_case              =      self.num_labels
					_snake_case              =      TFAlbertForTokenClassification(config=__SCREAMING_SNAKE_CASE   )
					_snake_case              =      {
					    "input_ids": input_ids,
					    "attention_mask": input_mask,
					    "token_type_ids": token_type_ids,
					}
					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )
					self.parent.assertListEqual(list(result["logits"].shape   )  ,					[self.batch_size, self.seq_length, self.num_labels]   )







		def 				_a				(			self    :				Any   ):






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

@require_tf
class 	_SCREAMING_SNAKE_CASE							(     _lowercase      ,     _lowercase      ,     unittest.TestCase							):






		"""simple docstring"""







		A_						 =      (
		    (
		        TFAlbertModel,
		        TFAlbertForPreTraining,
		        TFAlbertForMaskedLM,
		        TFAlbertForSequenceClassification,
		        TFAlbertForQuestionAnswering,
		        TFAlbertForTokenClassification,
		        TFAlbertForMultipleChoice,
		    )
		    if is_tf_available()
		    else ()
		)
		A_						 =      (
		    {
		        '''feature-extraction''': TFAlbertModel,
		        '''fill-mask''': TFAlbertForMaskedLM,
		        '''question-answering''': TFAlbertForQuestionAnswering,
		        '''text-classification''': TFAlbertForSequenceClassification,
		        '''token-classification''': TFAlbertForTokenClassification,
		        '''zero-shot''': TFAlbertForSequenceClassification,
		    }
		    if is_tf_available()
		    else {}
		)
		A_						 =      False
		A_						 =      False



		def 				_a				(			self    :				int  ,					__SCREAMING_SNAKE_CASE    :				Any  ,					__SCREAMING_SNAKE_CASE    :				Any  ,					__SCREAMING_SNAKE_CASE    :				List[str]=False   ):






					"""simple docstring"""
					_snake_case              =      super()._prepare_for_class(__SCREAMING_SNAKE_CASE  ,					__SCREAMING_SNAKE_CASE  ,					return_labels=__SCREAMING_SNAKE_CASE   )

					if return_labels:
								if model_class in get_values(__SCREAMING_SNAKE_CASE   ):
											_snake_case              =      tf.zeros(self.model_tester.batch_size  ,					dtype=tf.intaa   )

					return inputs_dict



		def 				_a				(			self    :				Union[str, Any]   ):






					"""simple docstring"""
					_snake_case              =      TFAlbertModelTester(self   )
					_snake_case              =      ConfigTester(self  ,					config_class=__SCREAMING_SNAKE_CASE  ,					hidden_size=37   )



		def 				_a				(			self    :				str   ):






					"""simple docstring"""
					self.config_tester.run_common_tests()



		def 				_a				(			self    :				Union[str, Any]   ):






					"""simple docstring"""
					_snake_case              =      self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_albert_model(*__SCREAMING_SNAKE_CASE   )



		def 				_a				(			self    :				Optional[Any]   ):






					"""simple docstring"""
					_snake_case              =      self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_albert_for_pretraining(*__SCREAMING_SNAKE_CASE   )



		def 				_a				(			self    :				List[str]   ):






					"""simple docstring"""
					_snake_case              =      self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_albert_for_masked_lm(*__SCREAMING_SNAKE_CASE   )



		def 				_a				(			self    :				str   ):






					"""simple docstring"""
					_snake_case              =      self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_albert_for_multiple_choice(*__SCREAMING_SNAKE_CASE   )



		def 				_a				(			self    :				List[Any]   ):






					"""simple docstring"""
					_snake_case              =      self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_albert_for_sequence_classification(*__SCREAMING_SNAKE_CASE   )



		def 				_a				(			self    :				Union[str, Any]   ):






					"""simple docstring"""
					_snake_case              =      self.model_tester.prepare_config_and_inputs()
					self.model_tester.create_and_check_albert_for_question_answering(*__SCREAMING_SNAKE_CASE   )







		@slow
		def 				_a				(			self    :				Any   ):






					"""simple docstring"""
					for model_name in TF_ALBERT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
								_snake_case              =      TFAlbertModel.from_pretrained(__SCREAMING_SNAKE_CASE   )
								self.assertIsNotNone(__SCREAMING_SNAKE_CASE   )

@require_tf
class 	_SCREAMING_SNAKE_CASE							(     unittest.TestCase							):






		"""simple docstring"""







		@slow
		def 				_a				(			self    :				List[Any]   ):






					"""simple docstring"""
					_snake_case              =      TFAlbertForPreTraining.from_pretrained("albert-base-v2"   )
					_snake_case              =      tf.constant([[0, 1, 2, 3, 4, 5]]   )
					_snake_case              =      model(__SCREAMING_SNAKE_CASE   )[0]

					_snake_case              =      [1, 6, 30_000]
					self.assertEqual(output.shape  ,					__SCREAMING_SNAKE_CASE   )

					_snake_case              =      tf.constant(
					    [
					        [
					            [4.5_9_5_6_6_8, 0.7_4_4_6_2_7_5_4, -1.8_1_8_1_4_7],
					            [4.5_9_5_4_3_4_7, 0.7_4_5_4_1_8_4, -1.8_1_8_8_2_5_8],
					            [4.5_9_5_4_9_0_5, 0.7_4_4_8_2_3_5, -1.8_1_8_2_3_1_6],
					        ]
					    ]   )
					tf.debugging.assert_near(output[:, :3, :3]  ,					__SCREAMING_SNAKE_CASE  ,					atol=1e-4   )


def    UpperCAmelCase__(						lowerCamelCase_							,	lowerCamelCase_  ):



			"""simple docstring"""





			_snake_case              =      sorted(lowerCamelCase_							,	key=lambda lowerCamelCase_  : value[2]							,	reverse=lowerCamelCase_  )

			# Create a list of size equal to the maximum deadline
			# and initialize it with -1
			_snake_case              =      max(lowerCamelCase_							,	key=lambda lowerCamelCase_  : value[1]  )[1]
			_snake_case              =      [-1] * max_deadline

			# Finding the maximum profit and the count of jobs
			_snake_case              =      0
			_snake_case              =      0
			for job in jobs:
						# Find a free time slot for this job
						# (Note that we start from the last possible slot)
						for i in range(job[1] - 1							,	-1							,	-1  ):
									if time_slots[i] == -1:
												_snake_case              =      job[0]
												count += 1
												max_profit += job[2]
												break
			return [count, max_profit]


if __name__ == "__main__":
			import doctest

			doctest.testmod()

