



import logging
import os
from dataclasses import dataclass, field
from importlib import import_module
from typing import Dict, List, Optional, Tuple

import numpy as np
from seqeval.metrics import classification_report, fa_score, precision_score, recall_score
from utils_ner import Split, TFTokenClassificationDataset, TokenClassificationTask

from transformers import (
    AutoConfig,
    AutoTokenizer,
    EvalPrediction,
    HfArgumentParser,
    TFAutoModelForTokenClassification,
    TFTrainer,
    TFTrainingArguments,
)
from transformers.utils import logging as hf_logging


hf_logging.set_verbosity_info()
hf_logging.enable_default_handler()
hf_logging.enable_explicit_format()


UpperCAmelCase :				Tuple							=logging.getLogger(__name__)


@dataclass
class    _lowercase :
				'''simple docstring'''







				lowercase__     =    field(
				    metadata={"""help""": """Path to pretrained model or model identifier from huggingface.co/models"""}   )
				lowercase__     =    field(
				    default=a_   , metadata={"""help""": """Pretrained config name or path if not the same as model_name"""}   )
				lowercase__     =    field(
				    default="""NER"""   , metadata={"""help""": """Task type to fine tune in training (e.g. NER, POS, etc)"""}   )
				lowercase__     =    field(
				    default=a_   , metadata={"""help""": """Pretrained tokenizer name or path if not the same as model_name"""}   )
				lowercase__     =    field(default=a_   , metadata={"""help""": """Set this flag to use fast tokenization."""}   )
				# If you want to tweak more attributes on your tokenizer, you should do it in a distinct script,
				# or just modify its tokenizer_config.json.
				lowercase__     =    field(
				    default=a_   , metadata={"""help""": """Where do you want to store the pretrained models downloaded from huggingface.co"""}   , )




@dataclass
class    _lowercase :
				'''simple docstring'''







				lowercase__     =    field(
				    metadata={"""help""": """The input data dir. Should contain the .txt files for a CoNLL-2003-formatted task."""}   )
				lowercase__     =    field(
				    metadata={"""help""": """Path to a file containing all labels. If not specified, CoNLL-2003 labels are used."""}   )
				lowercase__     =    field(
				    default=1_28   , metadata={
				        """help""": (
				            """The maximum total input sequence length after tokenization. Sequences longer """
				            """than this will be truncated, sequences shorter will be padded."""
				        )
				    }   , )
				lowercase__     =    field(
				    default=a_   , metadata={"""help""": """Overwrite the cached training and evaluation sets"""}   )




def  _lowerCAmelCase     ():
					# See all possible arguments in src/transformers/training_args.py
					# or by passing the --help flag to this script.
					# We now keep distinct sets of args, for a cleaner separation of concerns.
					UpperCamelCase_			= HfArgumentParser((ModelArguments, DataTrainingArguments, TFTrainingArguments))
					UpperCamelCase_	,     UpperCamelCase_	,     UpperCamelCase_			= parser.parse_args_into_dataclasses()

					if (
					    os.path.exists(training_args.output_dir)
					    and os.listdir(training_args.output_dir)
					    and training_args.do_train
					    and not training_args.overwrite_output_dir
					):
										raise ValueError(
										    f"""Output directory ({training_args.output_dir}) already exists and is not empty. Use"""
										    " --overwrite_output_dir to overcome.")

					UpperCamelCase_			= import_module("tasks")

					try:
										UpperCamelCase_			= getattr(_lowerCAmelCase ,						model_args.task_type)
										UpperCamelCase_			= token_classification_task_clazz()
					except AttributeError:
										raise ValueError(
										    f"""Task {model_args.task_type} needs to be defined as a TokenClassificationTask subclass in {module}. """
										    f"""Available tasks classes are: {TokenClassificationTask.__subclasses__()}""")

					# Setup logging
					logging.basicConfig(
					    format="%(asctime)s - %(levelname)s - %(name)s - %(message)s" ,						datefmt="%m/%d/%Y %H:%M:%S" ,						level=logging.INFO ,						)
					logger.info(
					    "n_replicas: %s, distributed training: %s, 16-bits training: %s" ,						training_args.n_replicas ,						bool(training_args.n_replicas > 1) ,						training_args.fpaa ,						)
					logger.info("Training/evaluation parameters %s" ,						_lowerCAmelCase)

					# Prepare Token Classification task
					UpperCamelCase_			= token_classification_task.get_labels(data_args.labels)
					UpperCamelCase_			= dict(enumerate(_lowerCAmelCase))
					UpperCamelCase_			= len(_lowerCAmelCase)

					# Load pretrained model and tokenizer
					#
					# Distributed training:
					# The .from_pretrained methods guarantee that only one local process can concurrently
					# download model & vocab.

					UpperCamelCase_			= AutoConfig.from_pretrained(
					    model_args.config_name if model_args.config_name else model_args.model_name_or_path ,						num_labels=_lowerCAmelCase ,						idalabel=_lowerCAmelCase ,						labelaid={label: i for i, label in enumerate(_lowerCAmelCase)} ,						cache_dir=model_args.cache_dir ,						)
					UpperCamelCase_			= AutoTokenizer.from_pretrained(
					    model_args.tokenizer_name if model_args.tokenizer_name else model_args.model_name_or_path ,						cache_dir=model_args.cache_dir ,						use_fast=model_args.use_fast ,						)

					with training_args.strategy.scope():
										UpperCamelCase_			= TFAutoModelForTokenClassification.from_pretrained(
										    model_args.model_name_or_path ,						from_pt=bool(".bin" in model_args.model_name_or_path) ,						config=_lowerCAmelCase ,						cache_dir=model_args.cache_dir ,						)

					# Get datasets
					UpperCamelCase_			= (
					    TFTokenClassificationDataset(
					        token_classification_task=_lowerCAmelCase ,						data_dir=data_args.data_dir ,						tokenizer=_lowerCAmelCase ,						labels=_lowerCAmelCase ,						model_type=config.model_type ,						max_seq_length=data_args.max_seq_length ,						overwrite_cache=data_args.overwrite_cache ,						mode=Split.train ,						)
					    if training_args.do_train
					    else None
					)
					UpperCamelCase_			= (
					    TFTokenClassificationDataset(
					        token_classification_task=_lowerCAmelCase ,						data_dir=data_args.data_dir ,						tokenizer=_lowerCAmelCase ,						labels=_lowerCAmelCase ,						model_type=config.model_type ,						max_seq_length=data_args.max_seq_length ,						overwrite_cache=data_args.overwrite_cache ,						mode=Split.dev ,						)
					    if training_args.do_eval
					    else None
					)

					def align_predictions(_lowerCAmelCase ,						_lowerCAmelCase) -> Tuple[List[int], List[int]]:
										UpperCamelCase_			= np.argmax(_lowerCAmelCase ,						axis=2)
										UpperCamelCase_	,     UpperCamelCase_			= preds.shape
										UpperCamelCase_			= [[] for _ in range(_lowerCAmelCase)]
										UpperCamelCase_			= [[] for _ in range(_lowerCAmelCase)]

										for i in range(_lowerCAmelCase):
															for j in range(_lowerCAmelCase):
																				if label_ids[i, j] != -1_00:
																									out_label_list[i].append(label_map[label_ids[i][j]])
																									preds_list[i].append(label_map[preds[i][j]])

										return preds_list, out_label_list

					def compute_metrics(_lowerCAmelCase) -> Dict:
										UpperCamelCase_	,     UpperCamelCase_			= align_predictions(p.predictions ,						p.label_ids)

										return {
										    "precision": precision_score(_lowerCAmelCase ,						_lowerCAmelCase),
										    "recall": recall_score(_lowerCAmelCase ,						_lowerCAmelCase),
										    "f1": fa_score(_lowerCAmelCase ,						_lowerCAmelCase),
										}

					# Initialize our Trainer
					UpperCamelCase_			= TFTrainer(
					    model=_lowerCAmelCase ,						args=_lowerCAmelCase ,						train_dataset=train_dataset.get_dataset() if train_dataset else None ,						eval_dataset=eval_dataset.get_dataset() if eval_dataset else None ,						compute_metrics=_lowerCAmelCase ,						)

					# Training
					if training_args.do_train:
										trainer.train()
										trainer.save_model()
										tokenizer.save_pretrained(training_args.output_dir)

					# Evaluation
					UpperCamelCase_			= {}
					if training_args.do_eval:
										logger.info("*** Evaluate ***")

										UpperCamelCase_			= trainer.evaluate()
										UpperCamelCase_			= os.path.join(training_args.output_dir ,						"eval_results.txt")

										with open(_lowerCAmelCase ,						"w") as writer:
															logger.info("***** Eval results *****")

															for key, value in result.items():
																				logger.info("  %s = %s" ,						_lowerCAmelCase ,						_lowerCAmelCase)
																				writer.write("%s = %s\n" % (key, value))

															results.update(_lowerCAmelCase)

    # Predict
					if training_args.do_predict:
										UpperCamelCase_			= TFTokenClassificationDataset(
										    token_classification_task=_lowerCAmelCase ,						data_dir=data_args.data_dir ,						tokenizer=_lowerCAmelCase ,						labels=_lowerCAmelCase ,						model_type=config.model_type ,						max_seq_length=data_args.max_seq_length ,						overwrite_cache=data_args.overwrite_cache ,						mode=Split.test ,						)

										UpperCamelCase_	,     UpperCamelCase_	,     UpperCamelCase_			= trainer.predict(test_dataset.get_dataset())
										UpperCamelCase_	,     UpperCamelCase_			= align_predictions(_lowerCAmelCase ,						_lowerCAmelCase)
										UpperCamelCase_			= classification_report(_lowerCAmelCase ,						_lowerCAmelCase)

										logger.info("\n%s" ,						_lowerCAmelCase)

										UpperCamelCase_			= os.path.join(training_args.output_dir ,						"test_results.txt")

										with open(_lowerCAmelCase ,						"w") as writer:
															writer.write("%s\n" % report)

										# Save predictions
										UpperCamelCase_			= os.path.join(training_args.output_dir ,						"test_predictions.txt")

										with open(_lowerCAmelCase ,						"w") as writer:
															with open(os.path.join(data_args.data_dir ,						"test.txt") ,						"r") as f:
																				UpperCamelCase_			= 0

																				for line in f:
																									if line.startswith("-DOCSTART-") or line == "" or line == "\n":
																														writer.write(_lowerCAmelCase)

																														if not preds_list[example_id]:
																																			example_id += 1
																									elif preds_list[example_id]:
																														UpperCamelCase_			= line.split()[0] + " " + preds_list[example_id].pop(0) + "\n"

																														writer.write(_lowerCAmelCase)
																									else:
																														logger.warning("Maximum sequence length exceeded: No prediction for '%s'." ,						line.split()[0])

					return results


if __name__ == "__main__":
	main()





from __future__ import annotations

import unittest

from transformers import 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 import (
			    TF_XLM_PRETRAINED_MODEL_ARCHIVE_LIST,
			    TFXLMForMultipleChoice,
			    TFXLMForQuestionAnsweringSimple,
			    TFXLMForSequenceClassification,
			    TFXLMForTokenClassification,
			    TFXLMModel,
			    TFXLMWithLMHeadModel,
			    XLMConfig,
			)
class       _lowerCAmelCase :






			"""simple docstring"""





			def __init__(					self						:							Tuple      ,  lowercase						:							str      ,  )    ->       str:
									"""simple docstring"""







									__lowercase											=					parent
									__lowercase											=					13
									__lowercase											=					7
									__lowercase											=					True
									__lowercase											=					True
									__lowercase											=					True
									__lowercase											=					True
									__lowercase											=					True
									__lowercase											=					False
									__lowercase											=					False
									__lowercase											=					False
									__lowercase											=					2
									__lowercase											=					99
									__lowercase											=					0
									__lowercase											=					32
									__lowercase											=					2
									__lowercase											=					4
									__lowercase											=					0.1
									__lowercase											=					0.1
									__lowercase											=					512
									__lowercase											=					16
									__lowercase											=					2
									__lowercase											=					0.02
									__lowercase											=					3
									__lowercase											=					4
									__lowercase											=					"""last"""
									__lowercase											=					True
									__lowercase											=					None
									__lowercase											=					0





			def 		snake_case__      (					self						:							Dict )    ->       Tuple:
									"""simple docstring"""







									__lowercase											=					ids_tensor([self.batch_size, self.seq_length]      ,  self.vocab_size )
									__lowercase											=					random_attention_mask([self.batch_size, self.seq_length]      ,  dtype=tf.floataa )

									__lowercase											=					None
									if self.use_input_lengths:
															__lowercase											=					(
															    ids_tensor([self.batch_size]      ,  vocab_size=2 ) + self.seq_length - 2
															)  # small variation of seq_length

									__lowercase											=					None
									if self.use_token_type_ids:
															__lowercase											=					ids_tensor([self.batch_size, self.seq_length]      ,  self.n_langs )

									__lowercase											=					None
									__lowercase											=					None
									__lowercase											=					None
									if self.use_labels:
															__lowercase											=					ids_tensor([self.batch_size]      ,  self.type_sequence_label_size )
															__lowercase											=					ids_tensor([self.batch_size, self.seq_length]      ,  self.num_labels )
															__lowercase											=					ids_tensor([self.batch_size]      ,  2      ,  dtype=tf.floataa )
															__lowercase											=					ids_tensor([self.batch_size]      ,  self.num_choices )

									__lowercase											=					XLMConfig(
									    vocab_size=self.vocab_size      ,  n_special=self.n_special      ,  emb_dim=self.hidden_size      ,  n_layers=self.num_hidden_layers      ,  n_heads=self.num_attention_heads      ,  dropout=self.hidden_dropout_prob      ,  attention_dropout=self.attention_probs_dropout_prob      ,  gelu_activation=self.gelu_activation      ,  sinusoidal_embeddings=self.sinusoidal_embeddings      ,  asm=self.asm      ,  causal=self.causal      ,  n_langs=self.n_langs      ,  max_position_embeddings=self.max_position_embeddings      ,  initializer_range=self.initializer_range      ,  summary_type=self.summary_type      ,  use_proj=self.use_proj      ,  bos_token_id=self.bos_token_id      ,  )

									return (
									    config,
									    input_ids,
									    token_type_ids,
									    input_lengths,
									    sequence_labels,
									    token_labels,
									    is_impossible_labels,
									    choice_labels,
									    input_mask,
									)





			def 		snake_case__      (					self						:							List[str]      ,  lowercase						:							Tuple      ,  lowercase						:							List[Any]      ,  lowercase						:							Optional[int]      ,  lowercase						:							Optional[int]      ,  lowercase						:							Optional[Any]      ,  lowercase						:							Optional[int]      ,  lowercase						:							Optional[Any]      ,  lowercase						:							int      ,  lowercase						:							List[str]      ,  )    ->       Dict:
									"""simple docstring"""







									__lowercase											=					TFXLMModel(config=lowercase )
									__lowercase											=					{"""input_ids""": input_ids, """lengths""": input_lengths, """langs""": token_type_ids}
									__lowercase											=					model(lowercase )

									__lowercase											=					[input_ids, input_mask]
									__lowercase											=					model(lowercase )
									self.parent.assertEqual(result.last_hidden_state.shape      ,  (self.batch_size, self.seq_length, self.hidden_size) )





			def 		snake_case__      (					self						:							Dict      ,  lowercase						:							List[str]      ,  lowercase						:							Optional[int]      ,  lowercase						:							Optional[Any]      ,  lowercase						:							List[Any]      ,  lowercase						:							Optional[Any]      ,  lowercase						:							Dict      ,  lowercase						:							Dict      ,  lowercase						:							int      ,  lowercase						:							Union[str, Any]      ,  )    ->       List[Any]:
									"""simple docstring"""







									__lowercase											=					TFXLMWithLMHeadModel(lowercase )

									__lowercase											=					{"""input_ids""": input_ids, """lengths""": input_lengths, """langs""": token_type_ids}
									__lowercase											=					model(lowercase )

									__lowercase											=					outputs

									self.parent.assertEqual(result.logits.shape      ,  (self.batch_size, self.seq_length, self.vocab_size) )





			def 		snake_case__      (					self						:							Optional[Any]      ,  lowercase						:							Optional[Any]      ,  lowercase						:							Any      ,  lowercase						:							int      ,  lowercase						:							List[Any]      ,  lowercase						:							Any      ,  lowercase						:							int      ,  lowercase						:							List[Any]      ,  lowercase						:							List[str]      ,  lowercase						:							Optional[Any]      ,  )    ->       Dict:
									"""simple docstring"""







									__lowercase											=					TFXLMForQuestionAnsweringSimple(lowercase )

									__lowercase											=					{"""input_ids""": input_ids, """lengths""": input_lengths}

									__lowercase											=					model(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						:							Optional[int]      ,  lowercase						:							Tuple      ,  lowercase						:							List[str]      ,  lowercase						:							List[Any]      ,  lowercase						:							Optional[int]      ,  lowercase						:							Optional[int]      ,  lowercase						:							Any      ,  lowercase						:							Tuple      ,  lowercase						:							Any      ,  lowercase						:							Dict      ,  )    ->       List[Any]:
									"""simple docstring"""







									__lowercase											=					TFXLMForSequenceClassification(lowercase )

									__lowercase											=					{"""input_ids""": input_ids, """lengths""": input_lengths}

									__lowercase											=					model(lowercase )

									self.parent.assertEqual(result.logits.shape      ,  (self.batch_size, self.type_sequence_label_size) )





			def 		snake_case__      (					self						:							Union[str, Any]      ,  lowercase						:							List[str]      ,  lowercase						:							Optional[int]      ,  lowercase						:							List[Any]      ,  lowercase						:							Optional[int]      ,  lowercase						:							Tuple      ,  lowercase						:							Optional[Any]      ,  lowercase						:							Tuple      ,  lowercase						:							List[Any]      ,  lowercase						:							Optional[Any]      ,  )    ->       int:
									"""simple docstring"""







									__lowercase											=					self.num_labels
									__lowercase											=					TFXLMForTokenClassification(config=lowercase )
									__lowercase											=					{"""input_ids""": input_ids, """attention_mask""": input_mask, """token_type_ids""": token_type_ids}
									__lowercase											=					model(lowercase )
									self.parent.assertEqual(result.logits.shape      ,  (self.batch_size, self.seq_length, self.num_labels) )





			def 		snake_case__      (					self						:							int      ,  lowercase						:							Tuple      ,  lowercase						:							Optional[Any]      ,  lowercase						:							str      ,  lowercase						:							str      ,  lowercase						:							Dict      ,  lowercase						:							Optional[Any]      ,  lowercase						:							Optional[Any]      ,  lowercase						:							List[str]      ,  lowercase						:							List[str]      ,  )    ->       List[str]:
									"""simple docstring"""







									__lowercase											=					self.num_choices
									__lowercase											=					TFXLMForMultipleChoice(config=lowercase )
									__lowercase											=					tf.tile(tf.expand_dims(lowercase      ,  1 )      ,  (1, self.num_choices, 1) )
									__lowercase											=					tf.tile(tf.expand_dims(lowercase      ,  1 )      ,  (1, self.num_choices, 1) )
									__lowercase											=					tf.tile(tf.expand_dims(lowercase      ,  1 )      ,  (1, self.num_choices, 1) )
									__lowercase											=					{
									    """input_ids""": multiple_choice_inputs_ids,
									    """attention_mask""": multiple_choice_input_mask,
									    """token_type_ids""": multiple_choice_token_type_ids,
									}
									__lowercase											=					model(lowercase )
									self.parent.assertEqual(result.logits.shape      ,  (self.batch_size, self.num_choices) )







			def 		snake_case__      (					self						:							str )    ->       Optional[int]:
									"""simple docstring"""







									__lowercase											=					self.prepare_config_and_inputs()
									(
									    (
									    __lowercase
									)						,      (
									    __lowercase
									)						,      (
									    __lowercase
									)						,      (
									    __lowercase
									)						,      (
									    __lowercase
									)						,      (
									    __lowercase
									)						,      (
									    __lowercase
									)						,      (
									    __lowercase
									)						,      (
									    __lowercase
									)						,      
									)											=					config_and_inputs
									__lowercase											=					{
									    """input_ids""": input_ids,
									    """token_type_ids""": token_type_ids,
									    """langs""": token_type_ids,
									    """lengths""": input_lengths,
									}
									return config, inputs_dict





@require_tf
class       _lowerCAmelCase (			_UpperCAmelCase     ,       _UpperCAmelCase     ,       unittest.TestCase      ):






			"""simple docstring"""





			lowercase__   :	Tuple  			=      (
			    (
			        TFXLMModel,
			        TFXLMWithLMHeadModel,
			        TFXLMForSequenceClassification,
			        TFXLMForQuestionAnsweringSimple,
			        TFXLMForTokenClassification,
			        TFXLMForMultipleChoice,
			    )
			    if is_tf_available()
			    else ()
			)
			lowercase__   :	List[str]  			=      (
			    (TFXLMWithLMHeadModel,) if is_tf_available() else ()
			)  # TODO (PVP): Check other models whether language generation is also applicable
			lowercase__   :	Tuple  			=      (
			    {
			        """feature-extraction""": TFXLMModel,
			        """fill-mask""": TFXLMWithLMHeadModel,
			        """question-answering""": TFXLMForQuestionAnsweringSimple,
			        """text-classification""": TFXLMForSequenceClassification,
			        """text-generation""": TFXLMWithLMHeadModel,
			        """token-classification""": TFXLMForTokenClassification,
			        """zero-shot""": TFXLMForSequenceClassification,
			    }
			    if is_tf_available()
			    else {}
			)
			lowercase__   :	int  			=      False
			lowercase__   :	int  			=      False





			def 		snake_case__      (					self						:							Optional[int]      ,  lowercase						:							List[str]      ,  lowercase						:							Optional[Any]      ,  lowercase						:							Optional[int]      ,  lowercase						:							List[str]      ,  lowercase						:							Dict )    ->       str:
									"""simple docstring"""







									if (
									    pipeline_test_casse_name == "QAPipelineTests"
									    and tokenizer_name is not None
									    and not tokenizer_name.endswith("""Fast""" )
									):
															# `QAPipelineTests` fails for a few models when the slower tokenizer are used.
															# (The slower tokenizers were never used for pipeline tests before the pipeline testing rework)
															# TODO: check (and possibly fix) the `QAPipelineTests` with slower tokenizer
															return True

									return False





			def 		snake_case__      (					self						:							Tuple )    ->       List[str]:
									"""simple docstring"""







									__lowercase											=					TFXLMModelTester(self )
									__lowercase											=					ConfigTester(self      ,  config_class=lowercase      ,  emb_dim=37 )





			def 		snake_case__      (					self						:							List[str] )    ->       List[str]:
									"""simple docstring"""







									self.config_tester.run_common_tests()





			def 		snake_case__      (					self						:							List[Any] )    ->       List[Any]:
									"""simple docstring"""







									__lowercase											=					self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_xlm_model(*lowercase )





			def 		snake_case__      (					self						:							str )    ->       str:
									"""simple docstring"""







									__lowercase											=					self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_xlm_lm_head(*lowercase )





			def 		snake_case__      (					self						:							Optional[int] )    ->       Optional[int]:
									"""simple docstring"""







									__lowercase											=					self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_xlm_qa(*lowercase )





			def 		snake_case__      (					self						:							Optional[Any] )    ->       str:
									"""simple docstring"""







									__lowercase											=					self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_xlm_sequence_classif(*lowercase )





			def 		snake_case__      (					self						:							Union[str, Any] )    ->       int:
									"""simple docstring"""







									__lowercase											=					self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_xlm_for_token_classification(*lowercase )





			def 		snake_case__      (					self						:							Optional[Any] )    ->       Tuple:
									"""simple docstring"""







									__lowercase											=					self.model_tester.prepare_config_and_inputs()
									self.model_tester.create_and_check_xlm_for_multiple_choice(*lowercase )







			@slow
			def 		snake_case__      (					self						:							Optional[int] )    ->       Optional[int]:
									"""simple docstring"""







									for model_name in TF_XLM_PRETRAINED_MODEL_ARCHIVE_LIST[:1]:
															__lowercase											=					TFXLMModel.from_pretrained(lowercase )
															self.assertIsNotNone(lowercase )





@require_tf
class       _lowerCAmelCase (			unittest.TestCase      ):






			"""simple docstring"""





			@slow
			def 		snake_case__      (					self						:							int )    ->       List[Any]:
									"""simple docstring"""







									__lowercase											=					TFXLMWithLMHeadModel.from_pretrained("""xlm-mlm-en-2048""" )
									__lowercase											=					tf.convert_to_tensor([[14, 447]]      ,  dtype=tf.intaa )  # the president
									__lowercase											=					[
									    14,
									    447,
									    14,
									    447,
									    14,
									    447,
									    14,
									    447,
									    14,
									    447,
									    14,
									    447,
									    14,
									    447,
									    14,
									    447,
									    14,
									    447,
									    14,
									    447,
									]  # the president the president the president the president the president the president the president the president the president the president
									# TODO(PVP): this and other input_ids I tried for generation give pretty bad results. Not sure why. Model might just not be made for auto-regressive inference
									__lowercase											=					model.generate(lowercase      ,  do_sample=lowercase )
									self.assertListEqual(output_ids[0].numpy().tolist()      ,  lowercase )





