


"""simple docstring"""



import dataclasses
import json
import warnings
from dataclasses import dataclass, field
from time import time
from typing import List

from ..utils import logging


lowercase_							=							logging.get_logger(__name__)
def      UpperCAmelCase     (       _lowercase :   List[str]=None			,   _lowercase :   Optional[Any]=None	)						-> Optional[Any]:


	"""simple docstring"""




	return field(default_factory=lambda: default			,   metadata=_lowercase	)







@dataclass
class    __a						:
				lowerCamelCase     :       List[str]			       =list_field(
				    default=[]					,			metadata={
				        'help': (
				            'Model checkpoints to be provided to the AutoModel classes. Leave blank to benchmark the base version'
				            ' of all available models'
				        )
				    }					,			)

				lowerCamelCase     :       List[int]			       =list_field(
				    default=[8]					,			metadata={'help': 'List of batch sizes for which memory and time performance will be evaluated'}							)

				lowerCamelCase     :       List[int]			       =list_field(
				    default=[8, 32, 128, 512]					,			metadata={'help': 'List of sequence lengths for which memory and time performance will be evaluated'}					,			)

				lowerCamelCase     :       bool			       =field(
				    default=__snake_case					,			metadata={'help': 'Whether to benchmark inference of model. Inference can be disabled via --no-inference.'}					,			)
				lowerCamelCase     :       bool			       =field(
				    default=__snake_case					,			metadata={'help': 'Whether to run on available cuda devices. Cuda can be disabled via --no-cuda.'}					,			)
				lowerCamelCase     :       bool			       =field(
				    default=__snake_case					,			metadata={'help': 'Whether to run on available tpu devices. TPU can be disabled via --no-tpu.'}							)
				lowerCamelCase     :       bool			       =field(default=__snake_case					,			metadata={'help': 'Use FP16 to accelerate inference.'}							)
				lowerCamelCase     :       bool			       =field(default=__snake_case					,			metadata={'help': 'Benchmark training of model'}							)
				lowerCamelCase     :       bool			       =field(default=__snake_case					,			metadata={'help': 'Verbose memory tracing'}							)
				lowerCamelCase     :       bool			       =field(
				    default=__snake_case					,			metadata={'help': 'Whether to perform speed measurements. Speed measurements can be disabled via --no-speed.'}					,			)
				lowerCamelCase     :       bool			       =field(
				    default=__snake_case					,			metadata={
				        'help': 'Whether to perform memory measurements. Memory measurements can be disabled via --no-memory'
				    }					,			)
				lowerCamelCase     :       bool			       =field(default=__snake_case					,			metadata={'help': 'Trace memory line by line'}							)
				lowerCamelCase     :       bool			       =field(default=__snake_case					,			metadata={'help': 'Save result to a CSV file'}							)
				lowerCamelCase     :       bool			       =field(default=__snake_case					,			metadata={'help': 'Save all print statements in a log file'}							)
				lowerCamelCase     :       bool			       =field(default=__snake_case					,			metadata={'help': 'Whether to print environment information'}							)
				lowerCamelCase     :       bool			       =field(
				    default=__snake_case					,			metadata={
				        'help': (
				            'Whether to use multiprocessing for memory and speed measurement. It is highly recommended to use'
				            ' multiprocessing for accurate CPU and GPU memory measurements. This option should only be disabled'
				            ' for debugging / testing and on TPU.'
				        )
				    }					,			)
				lowerCamelCase     :       str			       =field(
				    default=F'''inference_time_{round(time()							)}.csv'''					,			metadata={'help': 'CSV filename used if saving time results to csv.'}					,			)
				lowerCamelCase     :       str			       =field(
				    default=F'''inference_memory_{round(time()							)}.csv'''					,			metadata={'help': 'CSV filename used if saving memory results to csv.'}					,			)
				lowerCamelCase     :       str			       =field(
				    default=F'''train_time_{round(time()							)}.csv'''					,			metadata={'help': 'CSV filename used if saving time results to csv for training.'}					,			)
				lowerCamelCase     :       str			       =field(
				    default=F'''train_memory_{round(time()							)}.csv'''					,			metadata={'help': 'CSV filename used if saving memory results to csv for training.'}					,			)
				lowerCamelCase     :       str			       =field(
				    default=F'''env_info_{round(time()							)}.csv'''					,			metadata={'help': 'CSV filename used if saving environment information.'}					,			)
				lowerCamelCase     :       str			       =field(
				    default=F'''log_{round(time()							)}.csv'''					,			metadata={'help': 'Log filename used if print statements are saved in log.'}					,			)
				lowerCamelCase     :       int			       =field(default=3					,			metadata={'help': 'Times an experiment will be run.'}							)
				lowerCamelCase     :       bool			       =field(
				    default=__snake_case					,			metadata={
				        'help': (
				            'Instead of loading the model as defined in `config.architectures` if exists, just load the pretrain'
				            ' model weights.'
				        )
				    }					,			)







				def      lowerCamelCase_     ( self   ):

					'''simple docstring'''






					warnings.warn(
					    F"""The class {self.__class__} is deprecated. Hugging Face Benchmarking utils"""
					    ''' are deprecated in general and it is advised to use external Benchmarking libraries '''
					    ''' to benchmark Transformer models.'''      ,	UpperCAmelCase      ,	)







				def      lowerCamelCase_     ( self   ):

					'''simple docstring'''






					return json.dumps(dataclasses.asdict(self   )      ,	indent=2   )







				@property
				def      lowerCamelCase_     ( self   ):

					'''simple docstring'''






					if len(self.models   ) <= 0:
						raise ValueError(
						    '''Please make sure you provide at least one model name / model identifier, *e.g.* `--models'''
						    ''' bert-base-cased` or `args.models = [\'bert-base-cased\'].'''   )
					return self.models







				@property
				def      lowerCamelCase_     ( self   ):

					'''simple docstring'''






					if not self.multi_process:
						return False
					elif self.is_tpu:
						logger.info('''Multiprocessing is currently not possible on TPU.'''   )
						return False
					else:
						return True



"""simple docstring"""



from typing import TYPE_CHECKING

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


lowercase_							=							{
    'configuration_mobilebert': [
        'MOBILEBERT_PRETRAINED_CONFIG_ARCHIVE_MAP',
        'MobileBertConfig',
        'MobileBertOnnxConfig',
    ],
    'tokenization_mobilebert': ['MobileBertTokenizer'],
}

try:
		if not is_tokenizers_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase_							=							['MobileBertTokenizerFast']

try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase_							=							[
		    'MOBILEBERT_PRETRAINED_MODEL_ARCHIVE_LIST',
		    'MobileBertForMaskedLM',
		    'MobileBertForMultipleChoice',
		    'MobileBertForNextSentencePrediction',
		    'MobileBertForPreTraining',
		    'MobileBertForQuestionAnswering',
		    'MobileBertForSequenceClassification',
		    'MobileBertForTokenClassification',
		    'MobileBertLayer',
		    'MobileBertModel',
		    'MobileBertPreTrainedModel',
		    'load_tf_weights_in_mobilebert',
		]

try:
		if not is_tf_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowercase_							=							[
		    'TF_MOBILEBERT_PRETRAINED_MODEL_ARCHIVE_LIST',
		    'TFMobileBertForMaskedLM',
		    'TFMobileBertForMultipleChoice',
		    'TFMobileBertForNextSentencePrediction',
		    'TFMobileBertForPreTraining',
		    'TFMobileBertForQuestionAnswering',
		    'TFMobileBertForSequenceClassification',
		    'TFMobileBertForTokenClassification',
		    'TFMobileBertMainLayer',
		    'TFMobileBertModel',
		    'TFMobileBertPreTrainedModel',
		]


if TYPE_CHECKING:
		from .configuration_mobilebert import (
		    MOBILEBERT_PRETRAINED_CONFIG_ARCHIVE_MAP,
		    MobileBertConfig,
		    MobileBertOnnxConfig,
		)
		from .tokenization_mobilebert import MobileBertTokenizer

		try:
				if not is_tokenizers_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .tokenization_mobilebert_fast import MobileBertTokenizerFast

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_mobilebert import (
				    MOBILEBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
				    MobileBertForMaskedLM,
				    MobileBertForMultipleChoice,
				    MobileBertForNextSentencePrediction,
				    MobileBertForPreTraining,
				    MobileBertForQuestionAnswering,
				    MobileBertForSequenceClassification,
				    MobileBertForTokenClassification,
				    MobileBertLayer,
				    MobileBertModel,
				    MobileBertPreTrainedModel,
				    load_tf_weights_in_mobilebert,
				)

		try:
				if not is_tf_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_tf_mobilebert import (
				    TF_MOBILEBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
				    TFMobileBertForMaskedLM,
				    TFMobileBertForMultipleChoice,
				    TFMobileBertForNextSentencePrediction,
				    TFMobileBertForPreTraining,
				    TFMobileBertForQuestionAnswering,
				    TFMobileBertForSequenceClassification,
				    TFMobileBertForTokenClassification,
				    TFMobileBertMainLayer,
				    TFMobileBertModel,
				    TFMobileBertPreTrainedModel,
				)

else:
		import sys

		lowercase_							=							_LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)