


'''simple docstring'''

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_						:       Union[str, Any]      			=				logging.get_logger(__name__)





@dataclass
class   snake_case					(					lowercase    ):





		"""simple docstring"""




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






		def __init__(					self    ,						**UpperCamelCase  ):







			"""simple docstring"""
			for deprecated_arg in self.deprecated_args:
				if deprecated_arg in kwargs:
					lowerCamelCase_  				=						deprecated_arg[3:]
					lowerCamelCase_  				=						not kwargs.pop(UpperCamelCase  )
					logger.warning(
					    f'''{deprecated_arg} is depreciated. Please use --no-{positive_arg} or'''
					    f''' {positive_arg}={kwargs[positive_arg]}'''  )
			lowerCamelCase_  				=						kwargs.pop("tpu_name"    ,						self.tpu_name  )
			lowerCamelCase_  				=						kwargs.pop("device_idx"    ,						self.device_idx  )
			lowerCamelCase_  				=						kwargs.pop("eager_mode"    ,						self.eager_mode  )
			lowerCamelCase_  				=						kwargs.pop("use_xla"    ,						self.use_xla  )
			super().__init__(**UpperCamelCase  )

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






		@cached_property
		def 						snake_case	(					self  ):







			"""simple docstring"""
			requires_backends(self    ,						["tf"]  )
			lowerCamelCase_  				=						None
			if self.tpu:
				try:
					if self.tpu_name:
						lowerCamelCase_  				=						tf.distribute.cluster_resolver.TPUClusterResolver(self.tpu_name  )
					else:
						lowerCamelCase_  				=						tf.distribute.cluster_resolver.TPUClusterResolver()
				except ValueError:
					lowerCamelCase_  				=						None
			return tpu






		@cached_property
		def 						snake_case	(					self  ):







			"""simple docstring"""
			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  )

				lowerCamelCase_  				=						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"  )
					lowerCamelCase_  				=						tf.distribute.OneDeviceStrategy(device=f'''/gpu:{self.device_idx}'''  )
				else:
					tf.config.set_visible_devices([]    ,						"GPU"  )  # disable GPU
					lowerCamelCase_  				=						tf.distribute.OneDeviceStrategy(device=f'''/cpu:{self.device_idx}'''  )

			return strategy






		@property
		def 						snake_case	(					self  ):







			"""simple docstring"""
			requires_backends(self    ,						["tf"]  )
			return self._setup_tpu is not None






		@property
		def 						snake_case	(					self  ):







			"""simple docstring"""
			requires_backends(self    ,						["tf"]  )
			return self._setup_strategy






		@property
		def 						snake_case	(					self  ):







			"""simple docstring"""
			requires_backends(self    ,						["tf"]  )
			return tf.config.list_physical_devices("GPU"  )






		@property
		def 						snake_case	(					self  ):







			"""simple docstring"""
			requires_backends(self    ,						["tf"]  )
			if self.cuda:
				return len(self.gpu_list  )
			return 0







		@property
		def 						snake_case	(					self  ):







			"""simple docstring"""
			return self.n_gpu > 0







'''simple docstring'''

import functools
import operator

from ...configuration_utils import PretrainedConfig
from ...utils import logging


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

a_						:       Dict      			=				{
    """microsoft/unispeech-large-1500h-cv""": (
        """https://huggingface.co/microsoft/unispeech-large-1500h-cv/resolve/main/config.json"""
    ),
    # See all UniSpeech models at https://huggingface.co/models?filter=unispeech
}





class   snake_case					(					lowercase    ):





  """simple docstring"""




  _lowerCamelCase						=						"unispeech"






  def __init__(					self    ,						UpperCamelCase=32    ,						UpperCamelCase=768    ,						UpperCamelCase=12    ,						UpperCamelCase=12    ,						UpperCamelCase=3072    ,						UpperCamelCase="gelu"    ,						UpperCamelCase=0.1    ,						UpperCamelCase=0.1    ,						UpperCamelCase=0.1    ,						UpperCamelCase=0.0    ,						UpperCamelCase=0.0    ,						UpperCamelCase=0.1    ,						UpperCamelCase=0.1    ,						UpperCamelCase=0.02    ,						UpperCamelCase=1e-5    ,						UpperCamelCase="group"    ,						UpperCamelCase="gelu"    ,						UpperCamelCase=(512, 512, 512, 512, 512, 512, 512)    ,						UpperCamelCase=(5, 2, 2, 2, 2, 2, 2)    ,						UpperCamelCase=(10, 3, 3, 3, 3, 2, 2)    ,						UpperCamelCase=False    ,						UpperCamelCase=128    ,						UpperCamelCase=16    ,						UpperCamelCase=False    ,						UpperCamelCase=True    ,						UpperCamelCase=0.05    ,						UpperCamelCase=10    ,						UpperCamelCase=2    ,						UpperCamelCase=0.0    ,						UpperCamelCase=10    ,						UpperCamelCase=0    ,						UpperCamelCase=320    ,						UpperCamelCase=2    ,						UpperCamelCase=0.1    ,						UpperCamelCase=100    ,						UpperCamelCase=256    ,						UpperCamelCase=256    ,						UpperCamelCase=0.1    ,						UpperCamelCase="mean"    ,						UpperCamelCase=False    ,						UpperCamelCase=False    ,						UpperCamelCase=256    ,						UpperCamelCase=80    ,						UpperCamelCase=0    ,						UpperCamelCase=1    ,						UpperCamelCase=2    ,						UpperCamelCase=0.5    ,						**UpperCamelCase    ,						):







   """simple docstring"""
   super().__init__(**UpperCamelCase    ,						pad_token_id=UpperCamelCase    ,						bos_token_id=UpperCamelCase    ,						eos_token_id=UpperCamelCase  )
   lowerCamelCase_  				=						hidden_size
   lowerCamelCase_  				=						feat_extract_norm
   lowerCamelCase_  				=						feat_extract_activation
   lowerCamelCase_  				=						list(UpperCamelCase  )
   lowerCamelCase_  				=						list(UpperCamelCase  )
   lowerCamelCase_  				=						list(UpperCamelCase  )
   lowerCamelCase_  				=						conv_bias
   lowerCamelCase_  				=						num_conv_pos_embeddings
   lowerCamelCase_  				=						num_conv_pos_embedding_groups
   lowerCamelCase_  				=						len(self.conv_dim  )
   lowerCamelCase_  				=						num_hidden_layers
   lowerCamelCase_  				=						intermediate_size
   lowerCamelCase_  				=						hidden_act
   lowerCamelCase_  				=						num_attention_heads
   lowerCamelCase_  				=						hidden_dropout
   lowerCamelCase_  				=						attention_dropout
   lowerCamelCase_  				=						activation_dropout
   lowerCamelCase_  				=						feat_proj_dropout
   lowerCamelCase_  				=						final_dropout
   lowerCamelCase_  				=						layerdrop
   lowerCamelCase_  				=						layer_norm_eps
   lowerCamelCase_  				=						initializer_range
   lowerCamelCase_  				=						num_ctc_classes
   lowerCamelCase_  				=						vocab_size
   lowerCamelCase_  				=						do_stable_layer_norm
   lowerCamelCase_  				=						use_weighted_layer_sum
   lowerCamelCase_  				=						classifier_proj_size

   if (
       (len(self.conv_stride  ) != self.num_feat_extract_layers)
       or (len(self.conv_kernel  ) != self.num_feat_extract_layers)
       or (len(self.conv_dim  ) != self.num_feat_extract_layers)
   ):
    raise ValueError(
        "Configuration for convolutional layers is incorrect. It is required that `len(config.conv_dim)` =="
        " `len(config.conv_stride)` == `len(config.conv_kernel)`, but is `len(config.conv_dim) ="
        f''' {len(self.conv_dim  )}`, `len(config.conv_stride) = {len(self.conv_stride  )}`,'''
        f''' `len(config.conv_kernel) = {len(self.conv_kernel  )}`.'''  )

   # fine-tuning config parameters for SpecAugment: https://arxiv.org/abs/1904.08779
   lowerCamelCase_  				=						apply_spec_augment
   lowerCamelCase_  				=						mask_time_prob
   lowerCamelCase_  				=						mask_time_length
   lowerCamelCase_  				=						mask_time_min_masks
   lowerCamelCase_  				=						mask_feature_prob
   lowerCamelCase_  				=						mask_feature_length
   lowerCamelCase_  				=						mask_feature_min_masks

   # parameters for pretraining with codevector quantized representations
   lowerCamelCase_  				=						num_codevectors_per_group
   lowerCamelCase_  				=						num_codevector_groups
   lowerCamelCase_  				=						contrastive_logits_temperature
   lowerCamelCase_  				=						feat_quantizer_dropout
   lowerCamelCase_  				=						num_negatives
   lowerCamelCase_  				=						codevector_dim
   lowerCamelCase_  				=						proj_codevector_dim
   lowerCamelCase_  				=						diversity_loss_weight

   # ctc loss
   lowerCamelCase_  				=						ctc_loss_reduction
   lowerCamelCase_  				=						ctc_zero_infinity

   # pretraining loss
   lowerCamelCase_  				=						replace_prob







  @property
  def 						snake_case	(					self  ):







   """simple docstring"""
   return functools.reduce(operator.mul    ,						self.conv_stride    ,						1  )



