





import random
import timeit
from functools import wraps
from typing import Callable, Optional

from ..configuration_utils import PretrainedConfig
from ..models.auto.modeling_tf_auto import TF_MODEL_MAPPING, TF_MODEL_WITH_LM_HEAD_MAPPING
from ..utils import is_pyanvml_available, is_tf_available, logging
from .benchmark_utils import (
    Benchmark,
    Memory,
    MemorySummary,
    measure_peak_memory_cpu,
    start_memory_tracing,
    stop_memory_tracing,
)


if is_tf_available():
				import tensorflow as tf
				from tensorflow.python.framework.errors_impl import ResourceExhaustedError

				from .benchmark_args_tf import TensorFlowBenchmarkArguments

if is_pyanvml_available():
				import pyanvml.pyanvml as nvml

__lowercase       :Tuple       =  logging.get_logger(__name__)







def       UpperCAmelCase							(     _lowerCamelCase      :  bool			,   _lowerCamelCase      :  bool     ):





						'''simple docstring'''


						def run_func(_lowerCamelCase      :  Optional[Any]     ):
												@wraps(_lowerCamelCase     )
												def run_in_eager_mode(*_lowerCamelCase      :  Optional[Any]			,   **_lowerCamelCase      :  List[str]     ):
																		return func(*_lowerCamelCase			,   **_lowerCamelCase     )

												@wraps(_lowerCamelCase     )
												@tf.function(experimental_compile=_lowerCamelCase     )
												def run_in_graph_mode(*_lowerCamelCase      :  Optional[int]			,   **_lowerCamelCase      :  List[str]     ):
																		return func(*_lowerCamelCase			,   **_lowerCamelCase     )

												if do_eager_mode is True:
																		if use_xla is not False:
																								raise ValueError(
																								    "Cannot run model in XLA, if `args.eager_mode` is set to `True`. Please set `args.eager_mode=False`."     )
																		return run_in_eager_mode
												else:
																		return run_in_graph_mode

						return run_func







def       UpperCAmelCase							(     _lowerCamelCase      :  int			,   _lowerCamelCase      :  int			,   _lowerCamelCase      :  int     ):





						'''simple docstring'''


						SCREAMING_SNAKE_CASE__     :				int   =					random.Random()
						SCREAMING_SNAKE_CASE__     :				Dict   =					[rng.randint(0			,   vocab_size - 1     ) for i in range(batch_size * sequence_length     )]
						return tf.constant(_lowerCamelCase			,   shape=(batch_size, sequence_length)			,   dtype=tf.intaa     )



class    _a     (				lowercase__							):






							"""simple docstring"""

							snake_case_							 =						42
							snake_case_							 =						42
							snake_case_							 =						"TensorFlow"

							@property
							def      A_  (      self				:     Optional[Any]    )	->List[Any]:
													return tf.__version__

							def      A_  (      self				:     Optional[Any]							,	a				:     str							,	a				:     int							,	a				:     int    )	->float:
													# initialize GPU on separate process
													SCREAMING_SNAKE_CASE__     :				Dict   =					self.args.strategy
													if strategy is None:
																			raise ValueError("A device strategy has to be initialized before using TensorFlow."    )
													SCREAMING_SNAKE_CASE__     :				Any   =					self._prepare_inference_func(a							,	a							,	a    )
													return self._measure_speed(_inference    )

							def      A_  (      self				:     Optional[Any]							,	a				:     str							,	a				:     int							,	a				:     int    )	->float:
													SCREAMING_SNAKE_CASE__     :				Optional[Any]   =					self.args.strategy
													if strategy is None:
																			raise ValueError("A device strategy has to be initialized before using TensorFlow."    )
													SCREAMING_SNAKE_CASE__     :				Any   =					self._prepare_train_func(a							,	a							,	a    )
													return self._measure_speed(_train    )

							def      A_  (      self				:     List[Any]							,	a				:     str							,	a				:     int							,	a				:     int    )	->[Memory, Optional[MemorySummary]]:
													# initialize GPU on separate process
													if self.args.is_gpu:
																			tf.config.experimental.set_memory_growth(self.args.gpu_list[self.args.device_idx]							,	a    )
													SCREAMING_SNAKE_CASE__     :				Dict   =					self.args.strategy
													if strategy is None:
																			raise ValueError("A device strategy has to be initialized before using TensorFlow."    )
													SCREAMING_SNAKE_CASE__     :				Optional[Any]   =					self._prepare_inference_func(a							,	a							,	a    )
													return self._measure_memory(_inference    )

							def      A_  (      self				:     Dict							,	a				:     str							,	a				:     int							,	a				:     int    )	->[Memory, Optional[MemorySummary]]:
													if self.args.is_gpu:
																			tf.config.experimental.set_memory_growth(self.args.gpu_list[self.args.device_idx]							,	a    )
													SCREAMING_SNAKE_CASE__     :				List[str]   =					self.args.strategy
													if strategy is None:
																			raise ValueError("A device strategy has to be initialized before using TensorFlow."    )

													SCREAMING_SNAKE_CASE__     :				Dict   =					self._prepare_train_func(a							,	a							,	a    )
													return self._measure_memory(_train    )

							def      A_  (      self				:     Optional[Any]							,	a				:     str							,	a				:     int							,	a				:     int    )	->Callable[[], None]:
													SCREAMING_SNAKE_CASE__     :				List[str]   =					self.config_dict[model_name]

													if self.args.fpaa:
																			raise NotImplementedError("Mixed precision is currently not supported."    )

													SCREAMING_SNAKE_CASE__     :				List[Any]   =					(
													    hasattr(a							,	"architectures"    )
													    and isinstance(config.architectures							,	a    )
													    and len(config.architectures    ) > 0
													)
													if not self.args.only_pretrain_model and has_model_class_in_config:
																			try:
																									SCREAMING_SNAKE_CASE__     :				Dict   =					"TF" + config.architectures[0]  # prepend 'TF' for tensorflow model
																									SCREAMING_SNAKE_CASE__     :				Optional[int]   =					__import__("transformers"							,	fromlist=[model_class]    )
																									SCREAMING_SNAKE_CASE__     :				Any   =					getattr(a							,	a    )
																									SCREAMING_SNAKE_CASE__     :				Union[str, Any]   =					model_cls(a    )
																			except ImportError:
																									raise ImportError(
																									    f"""{model_class} does not exist. If you just want to test the pretrained model, you might want to"""
																									    " set `--only_pretrain_model` or `args.only_pretrain_model=True`."    )
													else:
																			SCREAMING_SNAKE_CASE__     :				str   =					TF_MODEL_MAPPING[config.__class__](a    )

													# encoder-decoder has vocab size saved differently
													SCREAMING_SNAKE_CASE__     :				str   =					config.vocab_size if hasattr(a							,	"vocab_size"    ) else config.encoder.vocab_size
													SCREAMING_SNAKE_CASE__     :				List[str]   =					random_input_ids(a							,	a							,	a    )

													@run_with_tf_optimizations(self.args.eager_mode							,	self.args.use_xla    )
													def encoder_decoder_forward():
																			return model(a							,	decoder_input_ids=a							,	training=a    )

													@run_with_tf_optimizations(self.args.eager_mode							,	self.args.use_xla    )
													def encoder_forward():
																			return model(a							,	training=a    )

													SCREAMING_SNAKE_CASE__     :				Tuple   =					encoder_decoder_forward if config.is_encoder_decoder else encoder_forward

													return _inference

							def      A_  (      self				:     str							,	a				:     str							,	a				:     int							,	a				:     int    )	->Callable[[], None]:
													SCREAMING_SNAKE_CASE__     :				Union[str, Any]   =					self.config_dict[model_name]

													if self.args.eager_mode is not False:
																			raise ValueError("Training cannot be done in eager mode. Please make sure that `args.eager_mode = False`."    )

													if self.args.fpaa:
																			raise NotImplementedError("Mixed precision is currently not supported."    )

													SCREAMING_SNAKE_CASE__     :				List[str]   =					(
													    hasattr(a							,	"architectures"    )
													    and isinstance(config.architectures							,	a    )
													    and len(config.architectures    ) > 0
													)
													if not self.args.only_pretrain_model and has_model_class_in_config:
																			try:
																									SCREAMING_SNAKE_CASE__     :				List[Any]   =					"TF" + config.architectures[0]  # prepend 'TF' for tensorflow model
																									SCREAMING_SNAKE_CASE__     :				Any   =					__import__("transformers"							,	fromlist=[model_class]    )
																									SCREAMING_SNAKE_CASE__     :				Any   =					getattr(a							,	a    )
																									SCREAMING_SNAKE_CASE__     :				Tuple   =					model_cls(a    )
																			except ImportError:
																									raise ImportError(
																									    f"""{model_class} does not exist. If you just want to test the pretrained model, you might want to"""
																									    " set `--only_pretrain_model` or `args.only_pretrain_model=True`."    )
													else:
																			SCREAMING_SNAKE_CASE__     :				Optional[int]   =					TF_MODEL_WITH_LM_HEAD_MAPPING[config.__class__](a    )

													# encoder-decoder has vocab size saved differently
													SCREAMING_SNAKE_CASE__     :				List[str]   =					config.vocab_size if hasattr(a							,	"vocab_size"    ) else config.encoder.vocab_size
													SCREAMING_SNAKE_CASE__     :				List[Any]   =					random_input_ids(a							,	a							,	a    )

													@run_with_tf_optimizations(self.args.eager_mode							,	self.args.use_xla    )
													def encoder_decoder_train():
																			SCREAMING_SNAKE_CASE__     :				List[Any]   =					model(a							,	decoder_input_ids=a							,	labels=a							,	training=a    )[0]
																			SCREAMING_SNAKE_CASE__     :				Any   =					tf.gradients(a							,	model.trainable_variables    )
																			return gradients

													@run_with_tf_optimizations(self.args.eager_mode							,	self.args.use_xla    )
													def encoder_train():
																			SCREAMING_SNAKE_CASE__     :				List[str]   =					model(a							,	labels=a							,	training=a    )[0]
																			SCREAMING_SNAKE_CASE__     :				Tuple   =					tf.gradients(a							,	model.trainable_variables    )
																			return gradients

													SCREAMING_SNAKE_CASE__     :				Optional[int]   =					encoder_decoder_train if config.is_encoder_decoder else encoder_train

													return _train

							def      A_  (      self				:     Union[str, Any]							,	a				:     str    )	->float:
													with self.args.strategy.scope():
																			try:
																									if self.args.is_tpu or self.args.use_xla:
																															# run additional 10 times to stabilize compilation for tpu
																															logger.info("Do inference on TPU. Running model 5 times to stabilize compilation"    )
																															timeit.repeat(a							,	repeat=1							,	number=5    )

																									# as written in https://docs.python.org/2/library/timeit.html#timeit.Timer.repeat, min should be taken rather than the average
																									SCREAMING_SNAKE_CASE__     :				List[Any]   =					timeit.repeat(
																									    a							,	repeat=self.args.repeat							,	number=10							,	)

																									return min(a    ) / 10.0
																			except ResourceExhaustedError as e:
																									self.print_fn(f"""Doesn't fit on GPU. {e}"""    )






							def      A_  (      self				:     Optional[Any]							,	a				:     Callable[[], None]    )	->[Memory, MemorySummary]:
													logger.info(
													    "Note that TensorFlow allocates more memory than "
													    "it might need to speed up computation. "
													    "The memory reported here corresponds to the memory "
													    "reported by `nvidia-smi`, which can vary depending "
													    "on total available memory on the GPU that is used."    )
													with self.args.strategy.scope():
																			try:
																									if self.args.trace_memory_line_by_line:
																															if not self.args.eager_mode:
																																					raise ValueError(
																																					    "`args.eager_mode` is set to `False`. Make sure to run model in eager mode to measure memory"
																																					    " consumption line by line."    )
																															SCREAMING_SNAKE_CASE__     :				int   =					start_memory_tracing("transformers"    )

																									if self.args.is_tpu:
																															# tpu
																															raise NotImplementedError(
																															    "Memory Benchmarking is currently not implemented for TPU. Please disable memory benchmarking"
																															    " with `args.memory=False`"    )
																									elif self.args.is_gpu:
																															# gpu
																															if not is_pyanvml_available():
																																					logger.warning(
																																					    "py3nvml not installed, we won't log GPU memory usage. "
																																					    "Install py3nvml (pip install py3nvml) to log information about GPU."    )
																																					SCREAMING_SNAKE_CASE__     :				Tuple   =					"N/A"
																															else:
																																					logger.info(
																																					    "Measuring total GPU usage on GPU device. Make sure to not have additional processes"
																																					    " running on the same GPU."    )
																																					# init nvml
																																					nvml.nvmlInit()
																																					func()
																																					SCREAMING_SNAKE_CASE__     :				Dict   =					nvml.nvmlDeviceGetHandleByIndex(self.args.device_idx    )
																																					SCREAMING_SNAKE_CASE__     :				Tuple   =					nvml.nvmlDeviceGetMemoryInfo(a    )
																																					SCREAMING_SNAKE_CASE__     :				int   =					meminfo.used
																																					SCREAMING_SNAKE_CASE__     :				Optional[Any]   =					Memory(a    )
																																					# shutdown nvml
																																					nvml.nvmlShutdown()
																									else:
																															# cpu
																															if self.args.trace_memory_line_by_line:
																																					logger.info(
																																					    "When enabling line by line tracing, the max peak memory for CPU is inaccurate in"
																																					    " TensorFlow."    )
																																					SCREAMING_SNAKE_CASE__     :				str   =					None
																															else:
																																					SCREAMING_SNAKE_CASE__     :				List[Any]   =					measure_peak_memory_cpu(a    )
																																					SCREAMING_SNAKE_CASE__     :				Any   =					Memory(a    ) if isinstance(a							,	a    ) else memory_bytes
																									if self.args.trace_memory_line_by_line:
																															SCREAMING_SNAKE_CASE__     :				int   =					stop_memory_tracing(a    )
																															if memory is None:
																																					SCREAMING_SNAKE_CASE__     :				Dict   =					summary.total
																									else:
																															SCREAMING_SNAKE_CASE__     :				Union[str, Any]   =					None

																									return memory, summary
																			except ResourceExhaustedError as e:
																									self.print_fn(f"""Doesn't fit on GPU. {e}"""    )
																									return "N/A", None






import logging
import os
from dataclasses import dataclass, field
from typing import Dict, Optional

import datasets
import numpy as np
import tensorflow as tf

from transformers import (
    AutoConfig,
    AutoTokenizer,
    EvalPrediction,
    HfArgumentParser,
    PreTrainedTokenizer,
    TFAutoModelForSequenceClassification,
    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()







def       UpperCAmelCase							(     _lowerCamelCase      :  str			,   _lowerCamelCase      :  str			,   _lowerCamelCase      :  str			,   _lowerCamelCase      :  PreTrainedTokenizer			,   _lowerCamelCase      :  int			,   _lowerCamelCase      :  Optional[int] = None			,   ):





						'''simple docstring'''


						SCREAMING_SNAKE_CASE__     :				str   =					{}

						if train_file is not None:
												SCREAMING_SNAKE_CASE__     :				Optional[Any]   =					[train_file]
						if eval_file is not None:
												SCREAMING_SNAKE_CASE__     :				int   =					[eval_file]
						if test_file is not None:
												SCREAMING_SNAKE_CASE__     :				int   =					[test_file]

						SCREAMING_SNAKE_CASE__     :				Optional[int]   =					datasets.load_dataset("csv"			,   data_files=_lowerCamelCase     )
						SCREAMING_SNAKE_CASE__     :				List[str]   =					list(ds[list(files.keys()     )[0]].features.keys()     )
						SCREAMING_SNAKE_CASE__     :				int   =					features_name.pop(_lowerCamelCase     )
						SCREAMING_SNAKE_CASE__     :				Optional[Any]   =					list(set(ds[list(files.keys()     )[0]][label_name]     )     )
						SCREAMING_SNAKE_CASE__     :				List[str]   =					{label: i for i, label in enumerate(_lowerCamelCase     )}
						SCREAMING_SNAKE_CASE__     :				Optional[int]   =					tokenizer.model_input_names
						SCREAMING_SNAKE_CASE__     :				Any   =					{}

						if len(_lowerCamelCase     ) == 1:
												for k in files.keys():
																		SCREAMING_SNAKE_CASE__     :				List[Any]   =					ds[k].map(
																		    lambda _lowerCamelCase     : tokenizer.batch_encode_plus(
																		        example[features_name[0]]			,   truncation=_lowerCamelCase			,   max_length=_lowerCamelCase			,   padding="max_length"     )			,   batched=_lowerCamelCase			,   )
						elif len(_lowerCamelCase     ) == 2:
												for k in files.keys():
																		SCREAMING_SNAKE_CASE__     :				Any   =					ds[k].map(
																		    lambda _lowerCamelCase     : tokenizer.batch_encode_plus(
																		        (example[features_name[0]], example[features_name[1]])			,   truncation=_lowerCamelCase			,   max_length=_lowerCamelCase			,   padding="max_length"			,   )			,   batched=_lowerCamelCase			,   )

						def gen_train():
												for ex in transformed_ds[datasets.Split.TRAIN]:
																		SCREAMING_SNAKE_CASE__     :				Tuple   =					{k: v for k, v in ex.items() if k in input_names}
																		SCREAMING_SNAKE_CASE__     :				List[Any]   =					labelaid[ex[label_name]]
																		yield (d, label)

						def gen_val():
												for ex in transformed_ds[datasets.Split.VALIDATION]:
																		SCREAMING_SNAKE_CASE__     :				int   =					{k: v for k, v in ex.items() if k in input_names}
																		SCREAMING_SNAKE_CASE__     :				Optional[int]   =					labelaid[ex[label_name]]
																		yield (d, label)

						def gen_test():
												for ex in transformed_ds[datasets.Split.TEST]:
																		SCREAMING_SNAKE_CASE__     :				int   =					{k: v for k, v in ex.items() if k in input_names}
																		SCREAMING_SNAKE_CASE__     :				Optional[Any]   =					labelaid[ex[label_name]]
																		yield (d, label)

						SCREAMING_SNAKE_CASE__     :				Tuple   =					(
						    tf.data.Dataset.from_generator(
						        _lowerCamelCase			,   ({k: tf.intaa for k in input_names}, tf.intaa)			,   ({k: tf.TensorShape([None]     ) for k in input_names}, tf.TensorShape([]     ))			,   )
						    if datasets.Split.TRAIN in transformed_ds
						    else None
						)

						if train_ds is not None:
												SCREAMING_SNAKE_CASE__     :				Any   =					train_ds.apply(tf.data.experimental.assert_cardinality(len(ds[datasets.Split.TRAIN]     )     )     )

						SCREAMING_SNAKE_CASE__     :				Optional[Any]   =					(
						    tf.data.Dataset.from_generator(
						        _lowerCamelCase			,   ({k: tf.intaa for k in input_names}, tf.intaa)			,   ({k: tf.TensorShape([None]     ) for k in input_names}, tf.TensorShape([]     ))			,   )
						    if datasets.Split.VALIDATION in transformed_ds
						    else None
						)

						if val_ds is not None:
												SCREAMING_SNAKE_CASE__     :				Union[str, Any]   =					val_ds.apply(tf.data.experimental.assert_cardinality(len(ds[datasets.Split.VALIDATION]     )     )     )

						SCREAMING_SNAKE_CASE__     :				Dict   =					(
						    tf.data.Dataset.from_generator(
						        _lowerCamelCase			,   ({k: tf.intaa for k in input_names}, tf.intaa)			,   ({k: tf.TensorShape([None]     ) for k in input_names}, tf.TensorShape([]     ))			,   )
						    if datasets.Split.TEST in transformed_ds
						    else None
						)

						if test_ds is not None:
												SCREAMING_SNAKE_CASE__     :				Dict   =					test_ds.apply(tf.data.experimental.assert_cardinality(len(ds[datasets.Split.TEST]     )     )     )

						return train_ds, val_ds, test_ds, labelaid


__lowercase       :List[Any]       =  logging.getLogger(__name__)



@dataclass
class    _a     :






							"""simple docstring"""

							snake_case_							 =						field(metadata={"help": "Which column contains the label"}							)
							snake_case_							 =						field(default=lowercase__					,							metadata={"help": "The path of the training file"}							)
							snake_case_							 =						field(default=lowercase__					,							metadata={"help": "The path of the development file"}							)
							snake_case_							 =						field(default=lowercase__					,							metadata={"help": "The path of the test file"}							)
							snake_case_							 =						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."
							        )
							    }					,							)
							snake_case_							 =						field(
							    default=lowercase__					,							metadata={"help": "Overwrite the cached training and evaluation sets"}							)







@dataclass
class    _a     :






							"""simple docstring"""

							snake_case_							 =						field(
							    metadata={"help": "Path to pretrained model or model identifier from huggingface.co/models"}							)
							snake_case_							 =						field(
							    default=lowercase__					,							metadata={"help": "Pretrained config name or path if not the same as model_name"}							)
							snake_case_							 =						field(
							    default=lowercase__					,							metadata={"help": "Pretrained tokenizer name or path if not the same as model_name"}							)
							snake_case_							 =						field(default=lowercase__					,							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.
							snake_case_							 =						field(
							    default=lowercase__					,							metadata={"help": "Where do you want to store the pretrained models downloaded from huggingface.co"}					,							)







def       UpperCAmelCase							(     ):





						'''simple docstring'''


						SCREAMING_SNAKE_CASE__     :				Union[str, Any]   =					HfArgumentParser((ModelArguments, DataTrainingArguments, TFTrainingArguments)     )
						SCREAMING_SNAKE_CASE__,							SCREAMING_SNAKE_CASE__,							SCREAMING_SNAKE_CASE__     :				List[Any]   =					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."     )

						# 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(
						    f"""n_replicas: {training_args.n_replicas}, distributed training: {bool(training_args.n_replicas > 1     )}, """
						    f"""16-bits training: {training_args.fpaa}"""     )
						logger.info(f"""Training/evaluation parameters {training_args}"""     )

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

						SCREAMING_SNAKE_CASE__     :				Any   =					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			,   )

						SCREAMING_SNAKE_CASE__,							SCREAMING_SNAKE_CASE__,							SCREAMING_SNAKE_CASE__,							SCREAMING_SNAKE_CASE__     :				Union[str, Any]   =					get_tfds(
						    train_file=data_args.train_file			,   eval_file=data_args.dev_file			,   test_file=data_args.test_file			,   tokenizer=_lowerCamelCase			,   label_column_id=data_args.label_column_id			,   max_seq_length=data_args.max_seq_length			,   )

						SCREAMING_SNAKE_CASE__     :				str   =					AutoConfig.from_pretrained(
						    model_args.config_name if model_args.config_name else model_args.model_name_or_path			,   num_labels=len(_lowerCamelCase     )			,   labelaid=_lowerCamelCase			,   idalabel={id: label for label, id in labelaid.items()}			,   finetuning_task="text-classification"			,   cache_dir=model_args.cache_dir			,   )

						with training_args.strategy.scope():
												SCREAMING_SNAKE_CASE__     :				Optional[Any]   =					TFAutoModelForSequenceClassification.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			,   )

						def compute_metrics(_lowerCamelCase      :  EvalPrediction     ) -> Dict:
												SCREAMING_SNAKE_CASE__     :				Dict   =					np.argmax(p.predictions			,   axis=1     )

												return {"acc": (preds == p.label_ids).mean()}

						# Initialize our Trainer
						SCREAMING_SNAKE_CASE__     :				str   =					TFTrainer(
						    model=_lowerCamelCase			,   args=_lowerCamelCase			,   train_dataset=_lowerCamelCase			,   eval_dataset=_lowerCamelCase			,   compute_metrics=_lowerCamelCase			,   )

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

						# Evaluation
						SCREAMING_SNAKE_CASE__     :				Dict   =					{}
						if training_args.do_eval:
												logger.info("*** Evaluate ***"     )
												SCREAMING_SNAKE_CASE__     :				str   =					trainer.evaluate()
												SCREAMING_SNAKE_CASE__     :				Union[str, Any]   =					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(f"""  {key} = {value}"""     )
																								writer.write(f"""{key} = {value}\n"""     )

																		results.update(_lowerCamelCase     )

						return results


if __name__ == "__main__":
				main()