



"""simple docstring"""
from dataclasses import dataclass, field
from typing import Tuple

from ..utils import cached_property, is_torch_available, is_torch_tpu_available, logging, requires_backends
from .benchmark_args_utils import BenchmarkArguments


if is_torch_available():
      import torch

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


A:   List[str]								=		logging.get_logger(__name__)



@dataclass
class       SCREAMING_SNAKE_CASE__  (					UpperCAmelCase__ ):
   __lowerCAmelCase  :   Tuple						=						[
       'no_inference',
       'no_cuda',
       'no_tpu',
       'no_speed',
       'no_memory',
       'no_env_print',
       'no_multi_process',
   ]

   def __init__(   self      ,     **_SCREAMING_SNAKE_CASE						)  ->      Dict:





    '''simple docstring'''




    for deprecated_arg in self.deprecated_args:
     if deprecated_arg in kwargs:
      UpperCAmelCase	:					int	=	deprecated_arg[3:]
      setattr(self      ,     _SCREAMING_SNAKE_CASE      ,     not kwargs.pop(_SCREAMING_SNAKE_CASE						)						)
      logger.warning(
          F"{deprecated_arg} is depreciated. Please use --no_{positive_arg} or"
          F" {positive_arg}={kwargs[positive_arg]}"						)

    UpperCAmelCase	:					Any	=	kwargs.pop("""torchscript"""      ,     self.torchscript						)
    UpperCAmelCase	:					str	=	kwargs.pop("""torch_xla_tpu_print_metrics"""      ,     self.torch_xla_tpu_print_metrics						)
    UpperCAmelCase	:					Optional[Any]	=	kwargs.pop("""fp16_opt_level"""      ,     self.fpaa_opt_level						)
    super().__init__(**_SCREAMING_SNAKE_CASE						)

   __lowerCAmelCase  :   bool						=						field(default=UpperCAmelCase__      ,			metadata={'help': 'Trace the models using torchscript'} )
   __lowerCAmelCase  :   bool						=						field(default=UpperCAmelCase__      ,			metadata={'help': 'Print Xla/PyTorch tpu metrics'} )
   __lowerCAmelCase  :   str						=						field(
       default='O1'      ,			metadata={
           'help': (
               'For fp16: Apex AMP optimization level selected in [\'O0\', \'O1\', \'O2\', and \'O3\']. '
               'See details at https://nvidia.github.io/apex/amp.html'
           )
       }      ,			)

   @cached_property
   def 	SCREAMING_SNAKE_CASE     (   self						)  ->      Tuple["torch.device", int]:





    '''simple docstring'''




    requires_backends(self      ,     ["""torch"""]						)
    logger.info("""PyTorch: setting up devices"""						)
    if not self.cuda:
     UpperCAmelCase	:					Optional[int]	=	torch.device("""cpu"""						)
     UpperCAmelCase	:					Union[str, Any]	=	0
    elif is_torch_tpu_available():
     UpperCAmelCase	:					Tuple	=	xm.xla_device()
     UpperCAmelCase	:					Any	=	0
    else:
     UpperCAmelCase	:					Any	=	torch.device("""cuda""" if torch.cuda.is_available() else """cpu"""						)
     UpperCAmelCase	:					Any	=	torch.cuda.device_count()
    return device, n_gpu

   @property
   def 	SCREAMING_SNAKE_CASE     (   self						)  ->      Union[str, Any]:





    '''simple docstring'''




    return is_torch_tpu_available() and self.tpu

   @property
   def 	SCREAMING_SNAKE_CASE     (   self						)  ->      int:





    '''simple docstring'''




    requires_backends(self      ,     ["""torch"""]						)
    # TODO(PVP): currently only single GPU is supported
    return torch.cuda.current_device()

   @property
   def 	SCREAMING_SNAKE_CASE     (   self						)  ->      "torch.device":





    '''simple docstring'''




    requires_backends(self      ,     ["""torch"""]						)
    return self._setup_devices[0]

   @property
   def 	SCREAMING_SNAKE_CASE     (   self						)  ->      Dict:





    '''simple docstring'''




    requires_backends(self      ,     ["""torch"""]						)
    return self._setup_devices[1]




   @property
   def 	SCREAMING_SNAKE_CASE     (   self						)  ->      List[Any]:





    '''simple docstring'''




    return self.n_gpu > 0





"""simple docstring"""
from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_flax_available,
    is_tf_available,
    is_tokenizers_available,
    is_torch_available,
)


A:   str								=		{
    "configuration_distilbert": [
        "DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP",
        "DistilBertConfig",
        "DistilBertOnnxConfig",
    ],
    "tokenization_distilbert": ["DistilBertTokenizer"],
}

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

try:
      if not is_torch_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      A:   List[Any]								=		[
          "DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST",
          "DistilBertForMaskedLM",
          "DistilBertForMultipleChoice",
          "DistilBertForQuestionAnswering",
          "DistilBertForSequenceClassification",
          "DistilBertForTokenClassification",
          "DistilBertModel",
          "DistilBertPreTrainedModel",
      ]

try:
      if not is_tf_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      A:   Dict								=		[
          "TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST",
          "TFDistilBertForMaskedLM",
          "TFDistilBertForMultipleChoice",
          "TFDistilBertForQuestionAnswering",
          "TFDistilBertForSequenceClassification",
          "TFDistilBertForTokenClassification",
          "TFDistilBertMainLayer",
          "TFDistilBertModel",
          "TFDistilBertPreTrainedModel",
      ]

try:
      if not is_flax_available():
            raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
      pass
else:
      A:   int								=		[
          "FlaxDistilBertForMaskedLM",
          "FlaxDistilBertForMultipleChoice",
          "FlaxDistilBertForQuestionAnswering",
          "FlaxDistilBertForSequenceClassification",
          "FlaxDistilBertForTokenClassification",
          "FlaxDistilBertModel",
          "FlaxDistilBertPreTrainedModel",
      ]


if TYPE_CHECKING:
      from .configuration_distilbert import (
          DISTILBERT_PRETRAINED_CONFIG_ARCHIVE_MAP,
          DistilBertConfig,
          DistilBertOnnxConfig,
      )
      from .tokenization_distilbert import DistilBertTokenizer

      try:
            if not is_tokenizers_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .tokenization_distilbert_fast import DistilBertTokenizerFast

      try:
            if not is_torch_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_distilbert import (
                DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
                DistilBertForMaskedLM,
                DistilBertForMultipleChoice,
                DistilBertForQuestionAnswering,
                DistilBertForSequenceClassification,
                DistilBertForTokenClassification,
                DistilBertModel,
                DistilBertPreTrainedModel,
            )

      try:
            if not is_tf_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_tf_distilbert import (
                TF_DISTILBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
                TFDistilBertForMaskedLM,
                TFDistilBertForMultipleChoice,
                TFDistilBertForQuestionAnswering,
                TFDistilBertForSequenceClassification,
                TFDistilBertForTokenClassification,
                TFDistilBertMainLayer,
                TFDistilBertModel,
                TFDistilBertPreTrainedModel,
            )

      try:
            if not is_flax_available():
                  raise OptionalDependencyNotAvailable()
      except OptionalDependencyNotAvailable:
            pass
      else:
            from .modeling_flax_distilbert import (
                FlaxDistilBertForMaskedLM,
                FlaxDistilBertForMultipleChoice,
                FlaxDistilBertForQuestionAnswering,
                FlaxDistilBertForSequenceClassification,
                FlaxDistilBertForTokenClassification,
                FlaxDistilBertModel,
                FlaxDistilBertPreTrainedModel,
            )

else:
      import sys

      A:   Optional[int]								=		_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)
