
'''simple docstring'''







import math
import time
from typing import Dict, List, Optional

from torch.utils.data import Dataset

from transformers import SeqaSeqTrainer, is_torch_tpu_available
from transformers.trainer_utils import PredictionOutput, speed_metrics


if is_torch_tpu_available(check_device=False):
							import torch_xla.core.xla_model as xm
							import torch_xla.debug.metrics as met






class  lowerCAmelCase__   (  lowerCamelCase_     ):






					def __init__(   self				,							*__SCREAMING_SNAKE_CASE				,							__SCREAMING_SNAKE_CASE=None				,							__SCREAMING_SNAKE_CASE=None				,							**__SCREAMING_SNAKE_CASE		):


											"""simple docstring"""





											super().__init__(*__SCREAMING_SNAKE_CASE				,							**__SCREAMING_SNAKE_CASE		)
											lowercase_	:     Tuple													=       eval_examples
											lowercase_	:     Tuple													=       post_process_function






					def 	_snake_case    (   self				,							__SCREAMING_SNAKE_CASE = None				,							__SCREAMING_SNAKE_CASE=None				,							__SCREAMING_SNAKE_CASE = None				,							__SCREAMING_SNAKE_CASE = "eval"				,							**__SCREAMING_SNAKE_CASE				,							):


											"""simple docstring"""





											lowercase_	:     Optional[int]													=       gen_kwargs.copy()
											lowercase_	:     List[str]													=       (
											    gen_kwargs['''max_length'''] if gen_kwargs.get('''max_length'''		) is not None else self.args.generation_max_length
											)
											lowercase_	:     str													=       (
											    gen_kwargs['''num_beams'''] if gen_kwargs.get('''num_beams'''		) is not None else self.args.generation_num_beams
											)
											lowercase_	:     Dict													=       gen_kwargs

											lowercase_	:     List[Any]													=       self.eval_dataset if eval_dataset is None else eval_dataset
											lowercase_	:     List[str]													=       self.get_eval_dataloader(__SCREAMING_SNAKE_CASE		)
											lowercase_	:     Optional[Any]													=       self.eval_examples if eval_examples is None else eval_examples

											# Temporarily disable metric computation, we will do it in the loop here.
											lowercase_	:     Union[str, Any]													=       self.compute_metrics
											lowercase_	:     Optional[int]													=       None
											lowercase_	:     Tuple													=       time.time()
											lowercase_	:     Tuple													=       self.prediction_loop if self.args.use_legacy_prediction_loop else self.evaluation_loop
											try:
																	lowercase_	:     str													=       eval_loop(
																	    __SCREAMING_SNAKE_CASE				,							description='''Evaluation'''				,							prediction_loss_only=True if compute_metrics is None else None				,							ignore_keys=__SCREAMING_SNAKE_CASE				,							metric_key_prefix=__SCREAMING_SNAKE_CASE				,							)
											finally:
																	lowercase_	:     Any													=       compute_metrics
											lowercase_	:     Any													=       self.args.eval_batch_size * self.args.world_size
											if F'''{metric_key_prefix}_jit_compilation_time''' in output.metrics:
																	start_time += output.metrics[F'''{metric_key_prefix}_jit_compilation_time''']
											output.metrics.update(
											    speed_metrics(
											        __SCREAMING_SNAKE_CASE				,							__SCREAMING_SNAKE_CASE				,							num_samples=output.num_samples				,							num_steps=math.ceil(output.num_samples / total_batch_size		)				,							)		)

											if self.post_process_function is not None and self.compute_metrics is not None and self.args.should_save:
																	# Only the main node write the results by default
																	lowercase_	:     Optional[Any]													=       self.post_process_function(__SCREAMING_SNAKE_CASE				,							__SCREAMING_SNAKE_CASE				,							__SCREAMING_SNAKE_CASE		)
																	lowercase_	:     Optional[int]													=       self.compute_metrics(__SCREAMING_SNAKE_CASE		)

																	# Prefix all keys with metric_key_prefix + '_'
																	for key in list(metrics.keys()		):
																							if not key.startswith(F'''{metric_key_prefix}_'''		):
																													lowercase_	:     List[Any]													=       metrics.pop(__SCREAMING_SNAKE_CASE		)

																	metrics.update(output.metrics		)
											else:
																	lowercase_	:     List[Any]													=       output.metrics

											if self.args.should_log:
																	# Only the main node log the results by default
																	self.log(__SCREAMING_SNAKE_CASE		)

											if self.args.tpu_metrics_debug or self.args.debug:
																	# tpu-comment: Logging debug metrics for PyTorch/XLA (compile, execute times, ops, etc.)
																	xm.master_print(met.metrics_report()		)

											lowercase_	:     List[Any]													=       self.callback_handler.on_evaluate(self.args				,							self.state				,							self.control				,							__SCREAMING_SNAKE_CASE		)
											return metrics






					def 	_snake_case    (   self				,							__SCREAMING_SNAKE_CASE				,							__SCREAMING_SNAKE_CASE				,							__SCREAMING_SNAKE_CASE=None				,							__SCREAMING_SNAKE_CASE = "test"				,							**__SCREAMING_SNAKE_CASE		):


											"""simple docstring"""





											lowercase_	:     Union[str, Any]													=       gen_kwargs.copy()

											lowercase_	:     Tuple													=       self.get_test_dataloader(__SCREAMING_SNAKE_CASE		)

											# Temporarily disable metric computation, we will do it in the loop here.
											lowercase_	:     Optional[Any]													=       self.compute_metrics
											lowercase_	:     Optional[int]													=       None
											lowercase_	:     List[Any]													=       time.time()
											lowercase_	:     int													=       self.prediction_loop if self.args.use_legacy_prediction_loop else self.evaluation_loop
											try:
																	lowercase_	:     Tuple													=       eval_loop(
																	    __SCREAMING_SNAKE_CASE				,							description='''Prediction'''				,							prediction_loss_only=True if compute_metrics is None else None				,							ignore_keys=__SCREAMING_SNAKE_CASE				,							metric_key_prefix=__SCREAMING_SNAKE_CASE				,							)
											finally:
																	lowercase_	:     Any													=       compute_metrics

											lowercase_	:     Tuple													=       self.args.eval_batch_size * self.args.world_size
											if F'''{metric_key_prefix}_jit_compilation_time''' in output.metrics:
																	start_time += output.metrics[F'''{metric_key_prefix}_jit_compilation_time''']
											output.metrics.update(
											    speed_metrics(
											        __SCREAMING_SNAKE_CASE				,							__SCREAMING_SNAKE_CASE				,							num_samples=output.num_samples				,							num_steps=math.ceil(output.num_samples / total_batch_size		)				,							)		)
											if self.post_process_function is None or self.compute_metrics is None:
																	return output

											lowercase_	:     Any													=       self.post_process_function(__SCREAMING_SNAKE_CASE				,							__SCREAMING_SNAKE_CASE				,							__SCREAMING_SNAKE_CASE				,							'''predict'''		)
											lowercase_	:     str													=       self.compute_metrics(__SCREAMING_SNAKE_CASE		)

											# Prefix all keys with metric_key_prefix + '_'
											for key in list(metrics.keys()		):
																	if not key.startswith(F'''{metric_key_prefix}_'''		):
																							lowercase_	:     Optional[int]													=       metrics.pop(__SCREAMING_SNAKE_CASE		)
											metrics.update(output.metrics		)
											return PredictionOutput(predictions=predictions.predictions				,							label_ids=predictions.label_ids				,							metrics=__SCREAMING_SNAKE_CASE		)





"""simple docstring"""




from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_sentencepiece_available,
    is_tokenizers_available,
    is_torch_available,
)


_A			:       Optional[int]   		=       {
    """configuration_llama""": ["""LLAMA_PRETRAINED_CONFIG_ARCHIVE_MAP""", """LlamaConfig"""],
}

try:
   if not is_sentencepiece_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _A			:       Union[str, Any]   		=       ["""LlamaTokenizer"""]

try:
   if not is_tokenizers_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _A			:       Dict   		=       ["""LlamaTokenizerFast"""]

try:
   if not is_torch_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   _A			:       int   		=       [
       """LlamaForCausalLM""",
       """LlamaModel""",
       """LlamaPreTrainedModel""",
       """LlamaForSequenceClassification""",
   ]


if TYPE_CHECKING:
   from .configuration_llama import LLAMA_PRETRAINED_CONFIG_ARCHIVE_MAP, LlamaConfig

   try:
      if not is_sentencepiece_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .tokenization_llama import LlamaTokenizer

   try:
      if not is_tokenizers_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .tokenization_llama_fast import LlamaTokenizerFast

   try:
      if not is_torch_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_llama import LlamaForCausalLM, LlamaForSequenceClassification, LlamaModel, LlamaPreTrainedModel


else:
   import sys

   _A			:       str   		=       _LazyModule(__name__, globals()["""__file__"""], _import_structure, module_spec=__spec__)


