import os
import pickle
import tempfile
import unittest
from typing import Callable, Optional

import numpy as np

from transformers import (
    BatchEncoding,
    BertTokenizer,
    BertTokenizerFast,
    PreTrainedTokenizer,
    PreTrainedTokenizerFast,
    TensorType,
    TokenSpan,
    is_tokenizers_available,
)
from transformers.models.gpta.tokenization_gpta import GPTaTokenizer
from transformers.testing_utils import CaptureStderr, require_flax, require_tf, require_tokenizers, require_torch, slow


if is_tokenizers_available():
				from tokenizers import Tokenizer
				from tokenizers.models import WordPiece





class 			__snake_case  (      unittest.TestCase     ):




					def       __a      (       self   ,	__UpperCamelCase		)					->  str:



									'''simple docstring'''







									snake_case__ :     Optional[int] 							=				list(tokenizer_class.max_model_input_sizes.keys()		)
									for model_name in sa_models[:1]:
													snake_case__ :     int 							=				tokenizer_class.from_pretrained(__UpperCamelCase		)
													self.assertIsNotNone(__UpperCamelCase		)
													self.assertIsInstance(__UpperCamelCase   ,	__UpperCamelCase		)
													self.assertIsInstance(__UpperCamelCase   ,	__UpperCamelCase		)

													for special_tok in tokenizer.all_special_tokens:
																	self.assertIsInstance(__UpperCamelCase   ,	__UpperCamelCase		)
																	snake_case__ :     Optional[Any] 							=				tokenizer.convert_tokens_to_ids(__UpperCamelCase		)
																	self.assertIsInstance(__UpperCamelCase   ,	__UpperCamelCase		)




					def       __a      (       self   ,	__UpperCamelCase   ,	__UpperCamelCase = None		)					->  Optional[Any]:



									'''simple docstring'''







									snake_case__ :     Optional[int] 							=				pickle.dumps(__UpperCamelCase		)
									self.assertIsNotNone(__UpperCamelCase		)

									snake_case__ :     str 							=				pickle.loads(__UpperCamelCase		)

									# Ensure is_fast is correctly restored
									self.assertEqual(be_restored.is_fast   ,	be_original.is_fast		)

									# Ensure encodings are potentially correctly restored
									if be_original.is_fast:
													self.assertIsNotNone(be_restored.encodings		)
									else:
													self.assertIsNone(be_restored.encodings		)

									# Ensure the keys are the same
									for original_v, restored_v in zip(be_original.values()   ,	be_restored.values()		):
													if equal_op:
																	self.assertTrue(equal_op(__UpperCamelCase   ,	__UpperCamelCase		)		)
													else:
																	self.assertEqual(__UpperCamelCase   ,	__UpperCamelCase		)




					@slow
					def       __a      (       self		)					->  Optional[int]:



									'''simple docstring'''







									self.check_tokenizer_from_pretrained(__UpperCamelCase		)




					def       __a      (       self		)					->  Optional[int]:



									'''simple docstring'''







									self.assertEqual(TensorType('tf'		)   ,	TensorType.TENSORFLOW		)
									self.assertEqual(TensorType('pt'		)   ,	TensorType.PYTORCH		)
									self.assertEqual(TensorType('np'		)   ,	TensorType.NUMPY		)




					@require_tokenizers
					def       __a      (       self		)					->  List[Any]:



									'''simple docstring'''







									import numpy as np

									snake_case__ :     Dict 							=				BertTokenizer.from_pretrained('bert-base-cased'		)
									snake_case__ :     Any 							=				BertTokenizerFast.from_pretrained('bert-base-cased'		)

									# Python no tensor
									with self.subTest('BatchEncoding (Python, return_tensors=None)'		):
													self.assert_dump_and_restore(tokenizer_p('Small example to encode'		)		)

									with self.subTest('BatchEncoding (Python, return_tensors=NUMPY)'		):
													self.assert_dump_and_restore(
													    tokenizer_p('Small example to encode'   ,	return_tensors=TensorType.NUMPY		)   ,	np.array_equal		)

									with self.subTest('BatchEncoding (Rust, return_tensors=None)'		):
													self.assert_dump_and_restore(tokenizer_r('Small example to encode'		)		)

									with self.subTest('BatchEncoding (Rust, return_tensors=NUMPY)'		):
													self.assert_dump_and_restore(
													    tokenizer_r('Small example to encode'   ,	return_tensors=TensorType.NUMPY		)   ,	np.array_equal		)




					@require_tf
					@require_tokenizers
					def       __a      (       self		)					->  List[str]:



									'''simple docstring'''







									import tensorflow as tf

									def tf_array_equals(__UpperCamelCase   ,	__UpperCamelCase		):
													return tf.reduce_all(tf.equal(__UpperCamelCase   ,	__UpperCamelCase		)		)

									snake_case__ :     str 							=				BertTokenizer.from_pretrained('bert-base-cased'		)
									snake_case__ :     int 							=				BertTokenizerFast.from_pretrained('bert-base-cased'		)

									with self.subTest('BatchEncoding (Python, return_tensors=TENSORFLOW)'		):
													self.assert_dump_and_restore(
													    tokenizer_p('Small example to encode'   ,	return_tensors=TensorType.TENSORFLOW		)   ,	__UpperCamelCase		)

									with self.subTest('BatchEncoding (Rust, return_tensors=TENSORFLOW)'		):
													self.assert_dump_and_restore(
													    tokenizer_r('Small example to encode'   ,	return_tensors=TensorType.TENSORFLOW		)   ,	__UpperCamelCase		)




					@require_torch
					@require_tokenizers
					def       __a      (       self		)					->  List[Any]:



									'''simple docstring'''







									import torch

									snake_case__ :     List[Any] 							=				BertTokenizer.from_pretrained('bert-base-cased'		)
									snake_case__ :     Dict 							=				BertTokenizerFast.from_pretrained('bert-base-cased'		)

									with self.subTest('BatchEncoding (Python, return_tensors=PYTORCH)'		):
													self.assert_dump_and_restore(
													    tokenizer_p('Small example to encode'   ,	return_tensors=TensorType.PYTORCH		)   ,	torch.equal		)

									with self.subTest('BatchEncoding (Rust, return_tensors=PYTORCH)'		):
													self.assert_dump_and_restore(
													    tokenizer_r('Small example to encode'   ,	return_tensors=TensorType.PYTORCH		)   ,	torch.equal		)




					@require_tokenizers
					def       __a      (       self		)					->  Tuple:



									'''simple docstring'''







									snake_case__ :     Optional[Any] 							=				BertTokenizer.from_pretrained('bert-base-cased'		)
									snake_case__ :     Tuple 							=				BertTokenizerFast.from_pretrained('bert-base-cased'		)

									with self.subTest('Python Tokenizer'		):
													self.assertFalse(tokenizer_p('Small example to_encode'		).is_fast		)

									with self.subTest('Rust Tokenizer'		):
													self.assertTrue(tokenizer_r('Small example to_encode'		).is_fast		)




					@require_tokenizers
					def       __a      (       self		)					->  int:



									'''simple docstring'''







									snake_case__ :     Any 							=				BertTokenizerFast.from_pretrained('bert-base-cased'		)
									snake_case__ :     Union[str, Any] 							=				tokenizer_r(['Test', '\xad', 'test']   ,	is_split_into_words=__UpperCamelCase		)

									self.assertEqual(encoded.word_to_tokens(0		)   ,	TokenSpan(start=1   ,	end=2		)		)
									self.assertEqual(encoded.word_to_tokens(1		)   ,	__UpperCamelCase		)
									self.assertEqual(encoded.word_to_tokens(2		)   ,	TokenSpan(start=2   ,	end=3		)		)




					def       __a      (       self		)					->  int:



									'''simple docstring'''







									snake_case__ :     str 							=				BatchEncoding({'inputs': [[1, 2, 3], [4, 5, 6]], 'labels': [0, 1]}		)
									snake_case__ :     Dict 							=				batch.convert_to_tensors(tensor_type='np'		)
									self.assertEqual(tensor_batch['inputs'].shape   ,	(2, 3)		)
									self.assertEqual(tensor_batch['labels'].shape   ,	(2,)		)
									# test converting the converted
									with CaptureStderr() as cs:
													snake_case__ :     int 							=				batch.convert_to_tensors(tensor_type='np'		)
									self.assertFalse(len(cs.err		)   ,	msg=F"""should have no warning, but got {cs.err}"""		)

									snake_case__ :     Optional[Any] 							=				BatchEncoding({'inputs': [1, 2, 3], 'labels': 0}		)
									snake_case__ :     Optional[int] 							=				batch.convert_to_tensors(tensor_type='np'   ,	prepend_batch_axis=__UpperCamelCase		)
									self.assertEqual(tensor_batch['inputs'].shape   ,	(1, 3)		)
									self.assertEqual(tensor_batch['labels'].shape   ,	(1,)		)




					@require_torch
					def       __a      (       self		)					->  int:



									'''simple docstring'''







									snake_case__ :     str 							=				BatchEncoding({'inputs': [[1, 2, 3], [4, 5, 6]], 'labels': [0, 1]}		)
									snake_case__ :     Optional[Any] 							=				batch.convert_to_tensors(tensor_type='pt'		)
									self.assertEqual(tensor_batch['inputs'].shape   ,	(2, 3)		)
									self.assertEqual(tensor_batch['labels'].shape   ,	(2,)		)
									# test converting the converted
									with CaptureStderr() as cs:
													snake_case__ :     List[Any] 							=				batch.convert_to_tensors(tensor_type='pt'		)
									self.assertFalse(len(cs.err		)   ,	msg=F"""should have no warning, but got {cs.err}"""		)

									snake_case__ :     int 							=				BatchEncoding({'inputs': [1, 2, 3], 'labels': 0}		)
									snake_case__ :     Any 							=				batch.convert_to_tensors(tensor_type='pt'   ,	prepend_batch_axis=__UpperCamelCase		)
									self.assertEqual(tensor_batch['inputs'].shape   ,	(1, 3)		)
									self.assertEqual(tensor_batch['labels'].shape   ,	(1,)		)




					@require_tf
					def       __a      (       self		)					->  List[str]:



									'''simple docstring'''







									snake_case__ :     str 							=				BatchEncoding({'inputs': [[1, 2, 3], [4, 5, 6]], 'labels': [0, 1]}		)
									snake_case__ :     Union[str, Any] 							=				batch.convert_to_tensors(tensor_type='tf'		)
									self.assertEqual(tensor_batch['inputs'].shape   ,	(2, 3)		)
									self.assertEqual(tensor_batch['labels'].shape   ,	(2,)		)
									# test converting the converted
									with CaptureStderr() as cs:
													snake_case__ :     int 							=				batch.convert_to_tensors(tensor_type='tf'		)
									self.assertFalse(len(cs.err		)   ,	msg=F"""should have no warning, but got {cs.err}"""		)

									snake_case__ :     int 							=				BatchEncoding({'inputs': [1, 2, 3], 'labels': 0}		)
									snake_case__ :     Tuple 							=				batch.convert_to_tensors(tensor_type='tf'   ,	prepend_batch_axis=__UpperCamelCase		)
									self.assertEqual(tensor_batch['inputs'].shape   ,	(1, 3)		)
									self.assertEqual(tensor_batch['labels'].shape   ,	(1,)		)




					@require_flax
					def       __a      (       self		)					->  List[str]:



									'''simple docstring'''







									snake_case__ :     Tuple 							=				BatchEncoding({'inputs': [[1, 2, 3], [4, 5, 6]], 'labels': [0, 1]}		)
									snake_case__ :     int 							=				batch.convert_to_tensors(tensor_type='jax'		)
									self.assertEqual(tensor_batch['inputs'].shape   ,	(2, 3)		)
									self.assertEqual(tensor_batch['labels'].shape   ,	(2,)		)
									# test converting the converted
									with CaptureStderr() as cs:
													snake_case__ :     List[Any] 							=				batch.convert_to_tensors(tensor_type='jax'		)
									self.assertFalse(len(cs.err		)   ,	msg=F"""should have no warning, but got {cs.err}"""		)

									snake_case__ :     int 							=				BatchEncoding({'inputs': [1, 2, 3], 'labels': 0}		)
									snake_case__ :     int 							=				batch.convert_to_tensors(tensor_type='jax'   ,	prepend_batch_axis=__UpperCamelCase		)
									self.assertEqual(tensor_batch['inputs'].shape   ,	(1, 3)		)
									self.assertEqual(tensor_batch['labels'].shape   ,	(1,)		)




					def       __a      (       self		)					->  Tuple:



									'''simple docstring'''







									snake_case__ :     Optional[Any] 							=				[{'input_ids': np.array([0, 1, 2]		)}, {'input_ids': np.array([0, 1, 2, 3]		)}]
									snake_case__ :     Optional[int] 							=				BertTokenizer.from_pretrained('bert-base-cased'		)

									snake_case__ :     str 							=				tokenizer.pad(__UpperCamelCase   ,	padding=__UpperCamelCase		)
									self.assertTrue(isinstance(batch['input_ids']   ,	np.ndarray		)		)
									self.assertEqual(batch['input_ids'].tolist()   ,	[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]		)
									snake_case__ :     int 							=				tokenizer.pad(__UpperCamelCase   ,	padding=__UpperCamelCase   ,	return_tensors='np'		)
									self.assertTrue(isinstance(batch['input_ids']   ,	np.ndarray		)		)
									self.assertEqual(batch['input_ids'].tolist()   ,	[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]		)




					@require_torch
					def       __a      (       self		)					->  Tuple:



									'''simple docstring'''







									import torch

									snake_case__ :     str 							=				[{'input_ids': torch.tensor([0, 1, 2]		)}, {'input_ids': torch.tensor([0, 1, 2, 3]		)}]
									snake_case__ :     Optional[int] 							=				BertTokenizer.from_pretrained('bert-base-cased'		)

									snake_case__ :     Union[str, Any] 							=				tokenizer.pad(__UpperCamelCase   ,	padding=__UpperCamelCase		)
									self.assertTrue(isinstance(batch['input_ids']   ,	torch.Tensor		)		)
									self.assertEqual(batch['input_ids'].tolist()   ,	[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]		)
									snake_case__ :     int 							=				tokenizer.pad(__UpperCamelCase   ,	padding=__UpperCamelCase   ,	return_tensors='pt'		)
									self.assertTrue(isinstance(batch['input_ids']   ,	torch.Tensor		)		)
									self.assertEqual(batch['input_ids'].tolist()   ,	[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]		)




					@require_tf
					def       __a      (       self		)					->  Any:



									'''simple docstring'''







									import tensorflow as tf

									snake_case__ :     Any 							=				[{'input_ids': tf.constant([0, 1, 2]		)}, {'input_ids': tf.constant([0, 1, 2, 3]		)}]
									snake_case__ :     Tuple 							=				BertTokenizer.from_pretrained('bert-base-cased'		)

									snake_case__ :     Any 							=				tokenizer.pad(__UpperCamelCase   ,	padding=__UpperCamelCase		)
									self.assertTrue(isinstance(batch['input_ids']   ,	tf.Tensor		)		)
									self.assertEqual(batch['input_ids'].numpy().tolist()   ,	[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]		)
									snake_case__ :     Optional[Any] 							=				tokenizer.pad(__UpperCamelCase   ,	padding=__UpperCamelCase   ,	return_tensors='tf'		)
									self.assertTrue(isinstance(batch['input_ids']   ,	tf.Tensor		)		)
									self.assertEqual(batch['input_ids'].numpy().tolist()   ,	[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]		)




					@require_tokenizers
					def       __a      (       self		)					->  List[str]:



									'''simple docstring'''







									snake_case__ :     List[Any] 							=				Tokenizer(WordPiece(unk_token='[UNK]'		)		)
									PreTrainedTokenizerFast(tokenizer_object=__UpperCamelCase		)




					@require_tokenizers
					def       __a      (       self		)					->  List[str]:



									'''simple docstring'''







									snake_case__ :     int 							=				Tokenizer(WordPiece(unk_token='[UNK]'		)		)
									with tempfile.TemporaryDirectory() as tmpdirname:
													bert_tokenizer.save(os.path.join(__UpperCamelCase   ,	'tokenizer.json'		)		)
													PreTrainedTokenizerFast(tokenizer_file=os.path.join(__UpperCamelCase   ,	'tokenizer.json'		)		)



from __future__ import annotations

import unittest

from transformers import OpenAIGPTConfig, 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.openai.modeling_tf_openai import (
				    TF_OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFOpenAIGPTDoubleHeadsModel,
				    TFOpenAIGPTForSequenceClassification,
				    TFOpenAIGPTLMHeadModel,
				    TFOpenAIGPTModel,
				)





class 			__snake_case  :




					def __init__(       self   ,	__UpperCamelCase   ,	)					->  Tuple:



									'''simple docstring'''







									snake_case__ :     List[str] 							=				parent
									snake_case__ :     Optional[int] 							=				13
									snake_case__ :     Tuple 							=				7
									snake_case__ :     Optional[int] 							=				True
									snake_case__ :     int 							=				True
									snake_case__ :     int 							=				True
									snake_case__ :     int 							=				True
									snake_case__ :     Union[str, Any] 							=				True
									snake_case__ :     Optional[Any] 							=				99
									snake_case__ :     Dict 							=				32
									snake_case__ :     Union[str, Any] 							=				2
									snake_case__ :     Tuple 							=				4
									snake_case__ :     List[str] 							=				37
									snake_case__ :     Optional[int] 							=				'gelu'
									snake_case__ :     List[str] 							=				0.1
									snake_case__ :     Union[str, Any] 							=				0.1
									snake_case__ :     str 							=				512
									snake_case__ :     str 							=				16
									snake_case__ :     Dict 							=				2
									snake_case__ :     List[Any] 							=				0.0_2
									snake_case__ :     Union[str, Any] 							=				3
									snake_case__ :     Optional[Any] 							=				4
									snake_case__ :     List[Any] 							=				None
									snake_case__ :     Union[str, Any] 							=				self.vocab_size - 1




					def       __a      (       self		)					->  Dict:



									'''simple docstring'''







									snake_case__ :     Any 							=				ids_tensor([self.batch_size, self.seq_length]   ,	self.vocab_size		)

									snake_case__ :     List[Any] 							=				None
									if self.use_input_mask:
													snake_case__ :     str 							=				random_attention_mask([self.batch_size, self.seq_length]		)

									snake_case__ :     List[str] 							=				None
									if self.use_token_type_ids:
													snake_case__ :     List[Any] 							=				ids_tensor([self.batch_size, self.seq_length]   ,	self.type_vocab_size		)

									snake_case__ :     Dict 							=				None
									if self.use_mc_token_ids:
													snake_case__ :     Any 							=				ids_tensor([self.batch_size, self.num_choices]   ,	self.seq_length		)

									snake_case__ :     List[Any] 							=				None
									snake_case__ :     Dict 							=				None
									snake_case__ :     str 							=				None
									if self.use_labels:
													snake_case__ :     Tuple 							=				ids_tensor([self.batch_size]   ,	self.type_sequence_label_size		)
													snake_case__ :     Tuple 							=				ids_tensor([self.batch_size, self.seq_length]   ,	self.num_labels		)
													snake_case__ :     Tuple 							=				ids_tensor([self.batch_size]   ,	self.num_choices		)

									snake_case__ :     str 							=				OpenAIGPTConfig(
									    vocab_size=self.vocab_size   ,	n_embd=self.hidden_size   ,	n_layer=self.num_hidden_layers   ,	n_head=self.num_attention_heads   ,	n_positions=self.max_position_embeddings   ,	pad_token_id=self.pad_token_id   ,	)

									snake_case__ :     Union[str, Any] 							=				ids_tensor([self.num_hidden_layers, self.num_attention_heads]   ,	2		)

									return (
									    config,
									    input_ids,
									    input_mask,
									    head_mask,
									    token_type_ids,
									    mc_token_ids,
									    sequence_labels,
									    token_labels,
									    choice_labels,
									)




					def       __a      (       self   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	*__UpperCamelCase		)					->  List[str]:



									'''simple docstring'''







									snake_case__ :     List[Any] 							=				TFOpenAIGPTModel(config=__UpperCamelCase		)
									snake_case__ :     str 							=				{'input_ids': input_ids, 'attention_mask': input_mask, 'token_type_ids': token_type_ids}
									snake_case__ :     Dict 							=				model(__UpperCamelCase		)

									snake_case__ :     Tuple 							=				[input_ids, input_mask]
									snake_case__ :     List[str] 							=				model(__UpperCamelCase		)

									snake_case__ :     Tuple 							=				model(__UpperCamelCase		)

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




					def       __a      (       self   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	*__UpperCamelCase		)					->  Optional[int]:



									'''simple docstring'''







									snake_case__ :     List[str] 							=				TFOpenAIGPTLMHeadModel(config=__UpperCamelCase		)
									snake_case__ :     Optional[int] 							=				{'input_ids': input_ids, 'attention_mask': input_mask, 'token_type_ids': token_type_ids}
									snake_case__ :     List[str] 							=				model(__UpperCamelCase		)
									self.parent.assertEqual(result.logits.shape   ,	(self.batch_size, self.seq_length, self.vocab_size)		)




					def       __a      (       self   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	*__UpperCamelCase		)					->  Tuple:



									'''simple docstring'''







									snake_case__ :     Dict 							=				TFOpenAIGPTDoubleHeadsModel(config=__UpperCamelCase		)

									snake_case__ :     Optional[int] 							=				tf.tile(tf.expand_dims(__UpperCamelCase   ,	1		)   ,	(1, self.num_choices, 1)		)
									snake_case__ :     Tuple 							=				tf.tile(tf.expand_dims(__UpperCamelCase   ,	1		)   ,	(1, self.num_choices, 1)		)
									snake_case__ :     Any 							=				tf.tile(tf.expand_dims(__UpperCamelCase   ,	1		)   ,	(1, self.num_choices, 1)		)

									snake_case__ :     Dict 							=				{
									    'input_ids': multiple_choice_inputs_ids,
									    'mc_token_ids': mc_token_ids,
									    'attention_mask': multiple_choice_input_mask,
									    'token_type_ids': multiple_choice_token_type_ids,
									}
									snake_case__ :     Tuple 							=				model(__UpperCamelCase		)
									self.parent.assertEqual(
									    result.logits.shape   ,	(self.batch_size, self.num_choices, self.seq_length, self.vocab_size)		)
									self.parent.assertEqual(result.mc_logits.shape   ,	(self.batch_size, self.num_choices)		)




					def       __a      (       self   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	*__UpperCamelCase		)					->  Tuple:



									'''simple docstring'''







									snake_case__ :     int 							=				self.num_labels
									snake_case__ :     int 							=				ids_tensor([self.batch_size]   ,	self.type_sequence_label_size		)
									snake_case__ :     str 							=				{
									    'input_ids': input_ids,
									    'attention_mask': input_mask,
									    'token_type_ids': token_type_ids,
									    'labels': sequence_labels,
									}
									snake_case__ :     str 							=				TFOpenAIGPTForSequenceClassification(__UpperCamelCase		)
									snake_case__ :     int 							=				model(__UpperCamelCase		)
									self.parent.assertEqual(result.logits.shape   ,	(self.batch_size, self.num_labels)		)




					def       __a      (       self		)					->  List[str]:



									'''simple docstring'''







									snake_case__ :     Dict 							=				self.prepare_config_and_inputs()

									(
									    (
									    snake_case__
									)							,  (
									    snake_case__
									)							,  (
									    snake_case__
									)							,  (
									    snake_case__
									)							,  (
									    snake_case__
									)							,  (
									    snake_case__
									)							,  (
									    snake_case__
									)							,  (
									    snake_case__
									)							,  (
									    snake_case__
									)							,  
									) :     Any 							=				config_and_inputs

									snake_case__ :     List[str] 							=				{'input_ids': input_ids, 'token_type_ids': token_type_ids, 'attention_mask': input_mask}
									return config, inputs_dict





@require_tf
class 			__snake_case  (      _lowerCamelCase   ,_lowerCamelCase   ,unittest.TestCase     ):
					__lowerCamelCase	 =       (
					    (TFOpenAIGPTModel, TFOpenAIGPTLMHeadModel, TFOpenAIGPTDoubleHeadsModel, TFOpenAIGPTForSequenceClassification)
					    if is_tf_available()
					    else ()
					)
					__lowerCamelCase	 =       (
					    (TFOpenAIGPTLMHeadModel,) if is_tf_available() else ()
					)  # TODO (PVP): Add Double HeadsModel when generate() function is changed accordingly
					__lowerCamelCase	 =       (
					    {
					        """feature-extraction""": TFOpenAIGPTModel,
					        """text-classification""": TFOpenAIGPTForSequenceClassification,
					        """text-generation""": TFOpenAIGPTLMHeadModel,
					        """zero-shot""": TFOpenAIGPTForSequenceClassification,
					    }
					    if is_tf_available()
					    else {}
					)
					__lowerCamelCase	 =       False
					__lowerCamelCase	 =       False




					def       __a      (       self   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase   ,	__UpperCamelCase		)					->  int:



									'''simple docstring'''







									if pipeline_test_casse_name == "ZeroShotClassificationPipelineTests":
													# Get `tokenizer does not have a padding token` error for both fast/slow tokenizers.
													# `OpenAIGPTConfig` was never used in pipeline tests, either because of a missing checkpoint or because a
													# tiny config could not be created.
													return True

									return False




					def       __a      (       self		)					->  Any:



									'''simple docstring'''







									snake_case__ :     Tuple 							=				TFOpenAIGPTModelTester(self		)
									snake_case__ :     Any 							=				ConfigTester(self   ,	config_class=__UpperCamelCase   ,	n_embd=37		)




					def       __a      (       self		)					->  int:



									'''simple docstring'''







									self.config_tester.run_common_tests()




					def       __a      (       self		)					->  Dict:



									'''simple docstring'''







									snake_case__ :     Optional[Any] 							=				self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_openai_gpt_model(*__UpperCamelCase		)




					def       __a      (       self		)					->  int:



									'''simple docstring'''







									snake_case__ :     str 							=				self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_openai_gpt_lm_head(*__UpperCamelCase		)




					def       __a      (       self		)					->  List[Any]:



									'''simple docstring'''







									snake_case__ :     Dict 							=				self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_openai_gpt_double_head(*__UpperCamelCase		)




					def       __a      (       self		)					->  Dict:



									'''simple docstring'''







									snake_case__ :     str 							=				self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_openai_gpt_for_sequence_classification(*__UpperCamelCase		)




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



									'''simple docstring'''







									for model_name in TF_OPENAI_GPT_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
													snake_case__ :     Optional[Any] 							=				TFOpenAIGPTModel.from_pretrained(__UpperCamelCase		)
													self.assertIsNotNone(__UpperCamelCase		)





@require_tf
class 			__snake_case  (      unittest.TestCase     ):




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



									'''simple docstring'''







									snake_case__ :     Dict 							=				TFOpenAIGPTLMHeadModel.from_pretrained('openai-gpt'		)
									snake_case__ :     Any 							=				tf.convert_to_tensor([[481, 4735, 544]]   ,	dtype=tf.intaa		)  # the president is
									snake_case__ :     int 							=				[
									    481,
									    4735,
									    544,
									    246,
									    963,
									    870,
									    762,
									    239,
									    244,
									    40477,
									    244,
									    249,
									    719,
									    881,
									    487,
									    544,
									    240,
									    244,
									    603,
									    481,
									]  # the president is a very good man. " \n " i\'m sure he is, " said the

									snake_case__ :     int 							=				model.generate(__UpperCamelCase   ,	do_sample=__UpperCamelCase		)
									self.assertListEqual(output_ids[0].numpy().tolist()   ,	__UpperCamelCase		)


