

from dataclasses import dataclass, field
from typing import Tuple

from ..utils import cached_property, is_tf_available, logging, requires_backends
from .benchmark_args_utils import BenchmarkArguments


if is_tf_available():
    import tensorflow as tf


__A			:					Dict						=			logging.get_logger(__name__)





@dataclass
class 			_SCREAMING_SNAKE_CASE (   __snake_case		):







   '''simple docstring'''




   lowerCamelCase__				=      [
       "no_inference",
       "no_cuda",
       "no_tpu",
       "no_speed",
       "no_memory",
       "no_env_print",
       "no_multi_process",
   ]





   def __init__(       self					:			List[Any]     , **__lowerCamelCase					:			Any			):
       for deprecated_arg in self.deprecated_args:
           if deprecated_arg in kwargs:
               SCREAMING_SNAKE_CASE										=   deprecated_arg[3:]
               SCREAMING_SNAKE_CASE										=   not kwargs.pop(__lowerCamelCase			)
               logger.warning(
                   f"{deprecated_arg} is depreciated. Please use --no-{positive_arg} or"
                   f" {positive_arg}={kwargs[positive_arg]}"			)
       SCREAMING_SNAKE_CASE										=   kwargs.pop("tpu_name"     , self.tpu_name			)
       SCREAMING_SNAKE_CASE										=   kwargs.pop("device_idx"     , self.device_idx			)
       SCREAMING_SNAKE_CASE										=   kwargs.pop("eager_mode"     , self.eager_mode			)
       SCREAMING_SNAKE_CASE										=   kwargs.pop("use_xla"     , self.use_xla			)
       super().__init__(**__lowerCamelCase			)

   lowerCamelCase__				=      field(
       default=__snake_case					,       metadata={"help": "Name of TPU"}					,       )
   lowerCamelCase__				=      field(
       default=0					,       metadata={"help": "CPU / GPU device index. Defaults to 0."}					,       )
   lowerCamelCase__				=      field(default=__snake_case					,       metadata={"help": "Benchmark models in eager model."}		)
   lowerCamelCase__				=      field(
       default=__snake_case					,       metadata={
           "help": "Benchmark models using XLA JIT compilation. Note that `eager_model` has to be set to `False`."
       }					,       )





   @cached_property
   def      _snake_case		(       self					:			Optional[int]			):
       requires_backends(self     , ["tf"]			)
       SCREAMING_SNAKE_CASE										=   None
       if self.tpu:
           try:
               if self.tpu_name:
                   SCREAMING_SNAKE_CASE										=   tf.distribute.cluster_resolver.TPUClusterResolver(self.tpu_name			)
               else:
                   SCREAMING_SNAKE_CASE										=   tf.distribute.cluster_resolver.TPUClusterResolver()
           except ValueError:
               SCREAMING_SNAKE_CASE										=   None
       return tpu





   @cached_property
   def      _snake_case		(       self					:			Any			):
       requires_backends(self     , ["tf"]			)
       if self.is_tpu:
           tf.config.experimental_connect_to_cluster(self._setup_tpu			)
           tf.tpu.experimental.initialize_tpu_system(self._setup_tpu			)

           SCREAMING_SNAKE_CASE										=   tf.distribute.TPUStrategy(self._setup_tpu			)
       else:
           # currently no multi gpu is allowed
           if self.is_gpu:
               # TODO: Currently only single GPU is supported
               tf.config.set_visible_devices(self.gpu_list[self.device_idx]     , "GPU"			)
               SCREAMING_SNAKE_CASE										=   tf.distribute.OneDeviceStrategy(device=f"/gpu:{self.device_idx}"			)
           else:
               tf.config.set_visible_devices([]     , "GPU"			)  # disable GPU
               SCREAMING_SNAKE_CASE										=   tf.distribute.OneDeviceStrategy(device=f"/cpu:{self.device_idx}"			)

       return strategy





   @property
   def      _snake_case		(       self					:			Any			):
       requires_backends(self     , ["tf"]			)
       return self._setup_tpu is not None





   @property
   def      _snake_case		(       self					:			Optional[Any]			):
       requires_backends(self     , ["tf"]			)
       return self._setup_strategy





   @property
   def      _snake_case		(       self					:			List[str]			):
       requires_backends(self     , ["tf"]			)
       return tf.config.list_physical_devices("GPU"			)





   @property
   def      _snake_case		(       self					:			Any			):
       requires_backends(self     , ["tf"]			)
       if self.cuda:
           return len(self.gpu_list			)
       return 0





   @property
   def      _snake_case		(       self					:			Dict			):
       return self.n_gpu > 0



'''simple docstring'''







from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_tokenizers_available, is_torch_available


lowerCAmelCase     :  Any											=    {
    """configuration_canine""": ["""CANINE_PRETRAINED_CONFIG_ARCHIVE_MAP""", """CanineConfig"""],
    """tokenization_canine""": ["""CanineTokenizer"""],
}

try:
       if not is_torch_available():
              raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
       pass
else:
       lowerCAmelCase     :  Tuple											=    [
           """CANINE_PRETRAINED_MODEL_ARCHIVE_LIST""",
           """CanineForMultipleChoice""",
           """CanineForQuestionAnswering""",
           """CanineForSequenceClassification""",
           """CanineForTokenClassification""",
           """CanineLayer""",
           """CanineModel""",
           """CaninePreTrainedModel""",
           """load_tf_weights_in_canine""",
       ]


if TYPE_CHECKING:
       from .configuration_canine import CANINE_PRETRAINED_CONFIG_ARCHIVE_MAP, CanineConfig
       from .tokenization_canine import CanineTokenizer

       try:
              if not is_torch_available():
                     raise OptionalDependencyNotAvailable()
       except OptionalDependencyNotAvailable:
              pass
       else:
              from .modeling_canine import (
                  CANINE_PRETRAINED_MODEL_ARCHIVE_LIST,
                  CanineForMultipleChoice,
                  CanineForQuestionAnswering,
                  CanineForSequenceClassification,
                  CanineForTokenClassification,
                  CanineLayer,
                  CanineModel,
                  CaninePreTrainedModel,
                  load_tf_weights_in_canine,
              )


else:
       import sys

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

