


'''simple docstring'''

from __future__ import annotations

import unittest

import numpy as np

from transformers import LayoutLMConfig, is_tf_available
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.models.layoutlm.modeling_tf_layoutlm import (
	    TF_LAYOUTLM_PRETRAINED_MODEL_ARCHIVE_LIST,
	    TFLayoutLMForMaskedLM,
	    TFLayoutLMForQuestionAnswering,
	    TFLayoutLMForSequenceClassification,
	    TFLayoutLMForTokenClassification,
	    TFLayoutLMModel,
	)


class       a__				:







				"""simple docstring"""



				def __init__(self       ,			__lowercase       ,			__lowercase=13       ,			__lowercase=7       ,			__lowercase=True       ,			__lowercase=True       ,			__lowercase=True       ,			__lowercase=True       ,			__lowercase=99       ,			__lowercase=32       ,			__lowercase=2       ,			__lowercase=4       ,			__lowercase=37       ,			__lowercase="gelu"       ,			__lowercase=0.1       ,			__lowercase=0.1       ,			__lowercase=5_12       ,			__lowercase=16       ,			__lowercase=2       ,			__lowercase=0.0_2       ,			__lowercase=3       ,			__lowercase=4       ,			__lowercase=None       ,			__lowercase=10_00       ,			):
										__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
										__lowerCAmelCase							       =				range_bbox




				def 					_snake_case  (self		):
										__lowerCAmelCase							       =				ids_tensor([self.batch_size, self.seq_length]       ,			self.vocab_size		)

										# convert bbox to numpy since TF does not support item assignment
										__lowerCAmelCase							       =				ids_tensor([self.batch_size, self.seq_length, 4]       ,			self.range_bbox		).numpy()
										# Ensure that bbox is legal
										for i in range(bbox.shape[0]		):
																for j in range(bbox.shape[1]		):
																						if bbox[i, j, 3] < bbox[i, j, 1]:
																												__lowerCAmelCase							       =				bbox[i, j, 3]
																												__lowerCAmelCase							       =				bbox[i, j, 1]
																												__lowerCAmelCase							       =				t
																						if bbox[i, j, 2] < bbox[i, j, 0]:
																												__lowerCAmelCase							       =				bbox[i, j, 2]
																												__lowerCAmelCase							       =				bbox[i, j, 0]
																												__lowerCAmelCase							       =				t
										__lowerCAmelCase							       =				tf.convert_to_tensor(__lowercase		)

										__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							       =				LayoutLMConfig(
										    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       ,			initializer_range=self.initializer_range       ,			)

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




				def 					_snake_case  (self       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase		):
										__lowerCAmelCase							       =				TFLayoutLMModel(config=__lowercase		)

										__lowerCAmelCase							       =				model(__lowercase       ,			__lowercase       ,			attention_mask=__lowercase       ,			token_type_ids=__lowercase		)
										__lowerCAmelCase							       =				model(__lowercase       ,			__lowercase       ,			token_type_ids=__lowercase		)
										__lowerCAmelCase							       =				model(__lowercase       ,			__lowercase		)
										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 					_snake_case  (self       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase		):
										__lowerCAmelCase							       =				TFLayoutLMForMaskedLM(config=__lowercase		)

										__lowerCAmelCase							       =				model(__lowercase       ,			__lowercase       ,			attention_mask=__lowercase       ,			token_type_ids=__lowercase       ,			labels=__lowercase		)
										self.parent.assertEqual(result.logits.shape       ,			(self.batch_size, self.seq_length, self.vocab_size)		)




				def 					_snake_case  (self       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase		):
										__lowerCAmelCase							       =				self.num_labels
										__lowerCAmelCase							       =				TFLayoutLMForSequenceClassification(config=__lowercase		)

										__lowerCAmelCase							       =				model(__lowercase       ,			__lowercase       ,			attention_mask=__lowercase       ,			token_type_ids=__lowercase		)
										self.parent.assertEqual(result.logits.shape       ,			(self.batch_size, self.num_labels)		)




				def 					_snake_case  (self       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase		):
										__lowerCAmelCase							       =				self.num_labels
										__lowerCAmelCase							       =				TFLayoutLMForTokenClassification(config=__lowercase		)

										__lowerCAmelCase							       =				model(__lowercase       ,			__lowercase       ,			attention_mask=__lowercase       ,			token_type_ids=__lowercase       ,			labels=__lowercase		)
										self.parent.assertEqual(result.logits.shape       ,			(self.batch_size, self.seq_length, self.num_labels)		)




				def 					_snake_case  (self       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase       ,			__lowercase		):
										__lowerCAmelCase							       =				TFLayoutLMForQuestionAnswering(config=__lowercase		)

										__lowerCAmelCase							       =				model(__lowercase       ,			__lowercase       ,			attention_mask=__lowercase       ,			token_type_ids=__lowercase		)
										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 					_snake_case  (self		):
										__lowerCAmelCase							       =				self.prepare_config_and_inputs()
										(
										    (
										    __lowerCAmelCase					
										)       ,					(
										    __lowerCAmelCase					
										)       ,					(
										    __lowerCAmelCase					
										)       ,					(
										    __lowerCAmelCase					
										)       ,					(
										    __lowerCAmelCase					
										)       ,					(
										    __lowerCAmelCase					
										)       ,					(
										    __lowerCAmelCase					
										)       ,					(
										    __lowerCAmelCase					
										)       ,										
										)							       =				config_and_inputs
										__lowerCAmelCase							       =				{
										    '''input_ids''': input_ids,
										    '''bbox''': bbox,
										    '''token_type_ids''': token_type_ids,
										    '''attention_mask''': input_mask,
										}
										return config, inputs_dict


@require_tf
class       a__				( __A							,						__A							,						unittest.TestCase      ):







				"""simple docstring"""



				__UpperCamelCase    :		Optional[Any]		=	(
				    (
				        TFLayoutLMModel,
				        TFLayoutLMForMaskedLM,
				        TFLayoutLMForTokenClassification,
				        TFLayoutLMForSequenceClassification,
				        TFLayoutLMForQuestionAnswering,
				    )
				    if is_tf_available()
				    else ()
				)
				__UpperCamelCase    :		List[Any]		=	(
				    {
				        'feature-extraction': TFLayoutLMModel,
				        'fill-mask': TFLayoutLMForMaskedLM,
				        'text-classification': TFLayoutLMForSequenceClassification,
				        'token-classification': TFLayoutLMForTokenClassification,
				        'zero-shot': TFLayoutLMForSequenceClassification,
				    }
				    if is_tf_available()
				    else {}
				)
				__UpperCamelCase    :		int		=	False
				__UpperCamelCase    :		List[str]		=	True
				__UpperCamelCase    :		List[str]		=	10




				def 					_snake_case  (self		):
										__lowerCAmelCase							       =				TFLayoutLMModelTester(self		)
										__lowerCAmelCase							       =				ConfigTester(self       ,			config_class=__lowercase       ,			hidden_size=37		)




				def 					_snake_case  (self		):
										self.config_tester.run_common_tests()




				def 					_snake_case  (self		):
										__lowerCAmelCase							       =				self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_model(*__lowercase		)




				def 					_snake_case  (self		):
										__lowerCAmelCase							       =				self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_for_masked_lm(*__lowercase		)




				def 					_snake_case  (self		):
										__lowerCAmelCase							       =				self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_for_sequence_classification(*__lowercase		)




				def 					_snake_case  (self		):
										__lowerCAmelCase							       =				self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_for_token_classification(*__lowercase		)




				def 					_snake_case  (self		):
										__lowerCAmelCase							       =				self.model_tester.prepare_config_and_inputs()
										self.model_tester.create_and_check_for_question_answering(*__lowercase		)




				@slow
				def 					_snake_case  (self		):
										for model_name in TF_LAYOUTLM_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
																__lowerCAmelCase							       =				TFLayoutLMModel.from_pretrained(__lowercase		)
																self.assertIsNotNone(__lowercase		)




				@unittest.skip('''Onnx compliancy broke with TF 2.10'''		)
				def 					_snake_case  (self		):
										pass

def 							__magic_name__(						):
						# Here we prepare a batch of 2 sequences to test a LayoutLM forward pass on:
						# fmt: off
						__lowerCAmelCase							       =				tf.convert_to_tensor([[1_0_1,1_0_1_9,1_0_1_4,1_0_1_6,1_0_3_7,1_2_8_4_9,4_7_4_7,1_0_0_4,1_4_2_4_6,2_2_7_8,5_4_3_9,4_5_2_4,5_0_0_2,2_9_3_0,2_1_9_3,2_9_3_0,4_3_4_1,3_2_0_8,1_0_0_5,1_0_5_5,2_1_7_1,2_8_4_8,1_1_3_0_0,3_5_3_1,1_0_2],[1_0_1,4_0_7_0,4_0_3_4,7_0_2_0,1_0_2_4,3_0_5_8,1_0_1_5,1_0_1_3,2_8_6_1,1_0_1_3,6_0_7_0,1_9_2_7_4,2_7_7_2,6_2_0_5,2_7_8_1_4,1_6_1_4_7,1_6_1_4_7,4_3_4_3,2_0_4_7,1_0_2_8_3,1_0_9_6_9,1_4_3_8_9,1_0_1_2,2_3_3_8,1_0_2]])  # noqa: E231
						__lowerCAmelCase							       =				tf.convert_to_tensor([[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],])  # noqa: E231
						__lowerCAmelCase							       =				tf.convert_to_tensor([[[0,0,0,0],[4_2_3,2_3_7,4_4_0,2_5_1],[4_2_7,2_7_2,4_4_1,2_8_7],[4_1_9,1_1_5,4_3_7,1_2_9],[9_6_1,8_8_5,9_9_2,9_1_2],[2_5_6,3_8,3_3_0,5_8],[2_5_6,3_8,3_3_0,5_8],[3_3_6,4_2,3_5_3,5_7],[3_6_0,3_9,4_0_1,5_6],[3_6_0,3_9,4_0_1,5_6],[4_1_1,3_9,4_7_1,5_9],[4_7_9,4_1,5_2_8,5_9],[5_3_3,3_9,6_3_0,6_0],[6_7,1_1_3,1_3_4,1_3_1],[1_4_1,1_1_5,2_0_9,1_3_2],[6_8,1_4_9,1_3_3,1_6_6],[1_4_1,1_4_9,1_8_7,1_6_4],[1_9_5,1_4_8,2_8_7,1_6_5],[1_9_5,1_4_8,2_8_7,1_6_5],[1_9_5,1_4_8,2_8_7,1_6_5],[2_9_5,1_4_8,3_4_9,1_6_5],[4_4_1,1_4_9,4_9_2,1_6_6],[4_9_7,1_4_9,5_4_6,1_6_4],[6_4,2_0_1,1_2_5,2_1_8],[1_0_0_0,1_0_0_0,1_0_0_0,1_0_0_0]],[[0,0,0,0],[6_6_2,1_5_0,7_5_4,1_6_6],[6_6_5,1_9_9,7_4_2,2_1_1],[5_1_9,2_1_3,5_5_4,2_2_8],[5_1_9,2_1_3,5_5_4,2_2_8],[1_3_4,4_3_3,1_8_7,4_5_4],[1_3_0,4_6_7,2_0_4,4_8_0],[1_3_0,4_6_7,2_0_4,4_8_0],[1_3_0,4_6_7,2_0_4,4_8_0],[1_3_0,4_6_7,2_0_4,4_8_0],[1_3_0,4_6_7,2_0_4,4_8_0],[3_1_4,4_6_9,3_7_6,4_8_2],[5_0_4,6_8_4,5_8_2,7_0_6],[9_4_1,8_2_5,9_7_3,9_0_0],[9_4_1,8_2_5,9_7_3,9_0_0],[9_4_1,8_2_5,9_7_3,9_0_0],[9_4_1,8_2_5,9_7_3,9_0_0],[6_1_0,7_4_9,6_5_2,7_6_5],[1_3_0,6_5_9,1_6_8,6_7_2],[1_7_6,6_5_7,2_3_7,6_7_2],[2_3_8,6_5_7,3_1_2,6_7_2],[4_4_3,6_5_3,6_2_8,6_7_2],[4_4_3,6_5_3,6_2_8,6_7_2],[7_1_6,3_0_1,8_2_5,3_1_7],[1_0_0_0,1_0_0_0,1_0_0_0,1_0_0_0]]])  # noqa: E231
						__lowerCAmelCase							       =				tf.convert_to_tensor([[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]])  # noqa: E231
						# these are sequence labels (i.e. at the token level)
						__lowerCAmelCase							       =				tf.convert_to_tensor([[-1_0_0,1_0,1_0,1_0,9,1,-1_0_0,7,7,-1_0_0,7,7,4,2,5,2,8,8,-1_0_0,-1_0_0,5,0,3,2,-1_0_0],[-1_0_0,1_2,1_2,1_2,-1_0_0,1_2,1_0,-1_0_0,-1_0_0,-1_0_0,-1_0_0,1_0,1_2,9,-1_0_0,-1_0_0,-1_0_0,1_0,1_0,1_0,9,1_2,-1_0_0,1_0,-1_0_0]])  # noqa: E231
						# fmt: on

						return input_ids, attention_mask, bbox, token_type_ids, labels




@require_tf
class       a__				( unittest.TestCase      ):







				"""simple docstring"""



				@slow
				def 					_snake_case  (self		):
										__lowerCAmelCase							       =				TFLayoutLMModel.from_pretrained('''microsoft/layoutlm-base-uncased'''		)

										__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase							       =				prepare_layoutlm_batch_inputs()

										# forward pass
										__lowerCAmelCase							       =				model(input_ids=__lowercase       ,			bbox=__lowercase       ,			attention_mask=__lowercase       ,			token_type_ids=__lowercase		)

										# test the sequence output on [0, :3, :3]
										__lowerCAmelCase							       =				tf.convert_to_tensor(
										    [[0.1_7_8_5, -0.1_9_4_7, -0.0_4_2_5], [-0.3_2_5_4, -0.2_8_0_7, 0.2_5_5_3], [-0.5_3_9_1, -0.3_3_2_2, 0.3_3_6_4]]       ,			)

										self.assertTrue(np.allclose(outputs.last_hidden_state[0, :3, :3]       ,			__lowercase       ,			atol=1e-3		)		)

										# test the pooled output on [1, :3]
										__lowerCAmelCase							       =				tf.convert_to_tensor([-0.6_5_8_0, -0.0_2_1_4, 0.8_5_5_2]		)

										self.assertTrue(np.allclose(outputs.pooler_output[1, :3]       ,			__lowercase       ,			atol=1e-3		)		)




				@slow
				def 					_snake_case  (self		):
										# initialize model with randomly initialized sequence classification head
										__lowerCAmelCase							       =				TFLayoutLMForSequenceClassification.from_pretrained('''microsoft/layoutlm-base-uncased'''       ,			num_labels=2		)

										__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase							       =				prepare_layoutlm_batch_inputs()

										# forward pass
										__lowerCAmelCase							       =				model(
										    input_ids=__lowercase       ,			bbox=__lowercase       ,			attention_mask=__lowercase       ,			token_type_ids=__lowercase       ,			labels=tf.convert_to_tensor([1, 1]		)       ,			)

										# test whether we get a loss as a scalar
										__lowerCAmelCase							       =				outputs.loss
										__lowerCAmelCase							       =				(2,)
										self.assertEqual(loss.shape       ,			__lowercase		)

										# test the shape of the logits
										__lowerCAmelCase							       =				outputs.logits
										__lowerCAmelCase							       =				(2, 2)
										self.assertEqual(logits.shape       ,			__lowercase		)




				@slow
				def 					_snake_case  (self		):
										# initialize model with randomly initialized token classification head
										__lowerCAmelCase							       =				TFLayoutLMForTokenClassification.from_pretrained('''microsoft/layoutlm-base-uncased'''       ,			num_labels=13		)

										__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase							       =				prepare_layoutlm_batch_inputs()

										# forward pass
										__lowerCAmelCase							       =				model(
										    input_ids=__lowercase       ,			bbox=__lowercase       ,			attention_mask=__lowercase       ,			token_type_ids=__lowercase       ,			labels=__lowercase		)

										# test the shape of the logits
										__lowerCAmelCase							       =				outputs.logits
										__lowerCAmelCase							       =				tf.convert_to_tensor((2, 25, 13)		)
										self.assertEqual(logits.shape       ,			__lowercase		)




				@slow
				def 					_snake_case  (self		):
										# initialize model with randomly initialized token classification head
										__lowerCAmelCase							       =				TFLayoutLMForQuestionAnswering.from_pretrained('''microsoft/layoutlm-base-uncased'''		)

										__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase       ,					__lowerCAmelCase							       =				prepare_layoutlm_batch_inputs()

										# forward pass
										__lowerCAmelCase							       =				model(input_ids=__lowercase       ,			bbox=__lowercase       ,			attention_mask=__lowercase       ,			token_type_ids=__lowercase		)

										# test the shape of the logits
										__lowerCAmelCase							       =				tf.convert_to_tensor((2, 25)		)
										self.assertEqual(outputs.start_logits.shape       ,			__lowercase		)
										self.assertEqual(outputs.end_logits.shape       ,			__lowercase		)





'''simple docstring'''

import unittest
from pathlib import Path
from tempfile import TemporaryDirectory

from transformers import AutoConfig, TFGPTaLMHeadModel, is_keras_nlp_available, is_tf_available
from transformers.models.gpta.tokenization_gpta import GPTaTokenizer
from transformers.testing_utils import require_keras_nlp, require_tf, slow


if is_tf_available():
	import tensorflow as tf

if is_keras_nlp_available():
	from transformers.models.gpta import TFGPTaTokenizer


_UpperCAmelCase				: str							    =				["""gpt2"""]
_UpperCAmelCase				: Optional[int]							    =				"""gpt2"""

if is_tf_available():


	class       a__				( tf.Module      ):







					"""simple docstring"""



					def __init__(self       ,			__lowercase		):
											super().__init__()
											__lowerCAmelCase							       =				tokenizer
											__lowerCAmelCase							       =				AutoConfig.from_pretrained(__lowercase		)
											__lowerCAmelCase							       =				TFGPTaLMHeadModel.from_config(__lowercase		)




					@tf.function(input_signature=(tf.TensorSpec((None,)       ,			tf.string       ,			name='''text'''		),)		)
					def 					_snake_case  (self       ,			__lowercase		):
											__lowerCAmelCase							       =				self.tokenizer(__lowercase		)
											__lowerCAmelCase							       =				tokenized['''input_ids'''].to_tensor()

											__lowerCAmelCase							       =				tf.cast(input_ids_dense > 0       ,			tf.intaa		)
											# input_mask = tf.reshape(input_mask, [-1, MAX_SEQ_LEN])

											__lowerCAmelCase							       =				self.model(input_ids=__lowercase       ,			attention_mask=__lowercase		)['''logits''']

											return outputs


@require_tf
@require_keras_nlp
class       a__				( unittest.TestCase      ):







				"""simple docstring"""



				def 					_snake_case  (self		):
										super().setUp()

										__lowerCAmelCase							       =				[GPTaTokenizer.from_pretrained(__lowercase		) for checkpoint in (TOKENIZER_CHECKPOINTS)]
										__lowerCAmelCase							       =				[TFGPTaTokenizer.from_pretrained(__lowercase		) for checkpoint in TOKENIZER_CHECKPOINTS]
										assert len(self.tokenizers		) == len(self.tf_tokenizers		)

										__lowerCAmelCase							       =				[
										    '''This is a straightforward English test sentence.''',
										    '''This one has some weird characters\rto\nsee\r\nif  those\u00E9break things.''',
										    '''Now we\'re going to add some Chinese: 一 二 三 一二三''',
										    '''And some much more rare Chinese: 齉 堃 齉堃''',
										    '''Je vais aussi écrire en français pour tester les accents''',
										    '''Classical Irish also has some unusual characters, so in they go: Gaelaċ, ꝼ''',
										]
										__lowerCAmelCase							       =				list(zip(self.test_sentences       ,			self.test_sentences[::-1]		)		)




				def 					_snake_case  (self		):
										for tokenizer, tf_tokenizer in zip(self.tokenizers       ,			self.tf_tokenizers		):
																for test_inputs in self.test_sentences:
																						__lowerCAmelCase							       =				tokenizer([test_inputs]       ,			return_tensors='''tf'''		)
																						__lowerCAmelCase							       =				tf_tokenizer([test_inputs]		)

																						for key in python_outputs.keys():
																												# convert them to numpy to avoid messing with ragged tensors
																												__lowerCAmelCase							       =				python_outputs[key].numpy()
																												__lowerCAmelCase							       =				tf_outputs[key].numpy()

																												self.assertTrue(tf.reduce_all(python_outputs_values.shape == tf_outputs_values.shape		)		)
																												self.assertTrue(tf.reduce_all(tf.cast(__lowercase       ,			tf.intaa		) == tf_outputs_values		)		)




				@slow
				def 					_snake_case  (self		):
										for tf_tokenizer in self.tf_tokenizers:
																__lowerCAmelCase							       =				tf.function(__lowercase		)
																for test_inputs in self.test_sentences:
																						__lowerCAmelCase							       =				tf.constant(__lowercase		)
																						__lowerCAmelCase							       =				compiled_tokenizer(__lowercase		)
																						__lowerCAmelCase							       =				tf_tokenizer(__lowercase		)

																						for key in eager_outputs.keys():
																												self.assertTrue(tf.reduce_all(eager_outputs[key] == compiled_outputs[key]		)		)




				@slow
				def 					_snake_case  (self		):
										for tf_tokenizer in self.tf_tokenizers:
																__lowerCAmelCase							       =				ModelToSave(tokenizer=__lowercase		)
																__lowerCAmelCase							       =				tf.convert_to_tensor([self.test_sentences[0]]		)
																__lowerCAmelCase							       =				model.serving(__lowercase		)  # Build model with some sample inputs
																with TemporaryDirectory() as tempdir:
																						__lowerCAmelCase							       =				Path(__lowercase		) / '''saved.model'''
																						tf.saved_model.save(__lowercase       ,			__lowercase       ,			signatures={'''serving_default''': model.serving}		)
																						__lowerCAmelCase							       =				tf.saved_model.load(__lowercase		)
																__lowerCAmelCase							       =				loaded_model.signatures['''serving_default'''](__lowercase		)['''output_0''']
																# We may see small differences because the loaded model is compiled, so we need an epsilon for the test
																self.assertTrue(tf.reduce_all(out == loaded_output		)		)




				@slow
				def 					_snake_case  (self		):
										for tf_tokenizer in self.tf_tokenizers:
																__lowerCAmelCase							       =				tf.convert_to_tensor([self.test_sentences[0]]		)
																__lowerCAmelCase							       =				tf_tokenizer(__lowercase		)  # Build model with some sample inputs

																__lowerCAmelCase							       =				tf_tokenizer.get_config()
																__lowerCAmelCase							       =				TFGPTaTokenizer.from_config(__lowercase		)
																__lowerCAmelCase							       =				model_from_config(__lowercase		)

																for key in from_config_output.keys():
																						self.assertTrue(tf.reduce_all(from_config_output[key] == out[key]		)		)




				@slow
				def 					_snake_case  (self		):
										for tf_tokenizer in self.tf_tokenizers:
																# for the test to run
																__lowerCAmelCase							       =				12_31_23

																for max_length in [3, 5, 10_24]:
																						__lowerCAmelCase							       =				tf.convert_to_tensor([self.test_sentences[0]]		)
																						__lowerCAmelCase							       =				tf_tokenizer(__lowercase       ,			max_length=__lowercase		)

																						__lowerCAmelCase							       =				out['''input_ids'''].numpy().shape[1]

																						assert out_length == max_length

