
"""simple docstring"""




import random
import timeit
from functools import wraps
from typing import Callable, Optional

from ..configuration_utils import PretrainedConfig
from ..models.auto.modeling_tf_auto import TF_MODEL_MAPPING, TF_MODEL_WITH_LM_HEAD_MAPPING
from ..utils import is_pyanvml_available, is_tf_available, logging
from .benchmark_utils import (
    Benchmark,
    Memory,
    MemorySummary,
    measure_peak_memory_cpu,
    start_memory_tracing,
    stop_memory_tracing,
)


if is_tf_available():
					import tensorflow as tf
					from tensorflow.python.framework.errors_impl import ResourceExhaustedError

					from .benchmark_args_tf import TensorFlowBenchmarkArguments

if is_pyanvml_available():
					import pyanvml.pyanvml as nvml

UpperCAmelCase__      :    Union[str, Any]    							= logging.get_logger(__name__)

def lowercase_  (   _snake_case   ,_snake_case						):
							def run_func(_snake_case						):
														@wraps(_snake_case						)
														def run_in_eager_mode(*_snake_case   ,**_snake_case						):
																					return func(*_snake_case   ,**_snake_case						)

														@wraps(_snake_case						)
														@tf.function(experimental_compile=_snake_case						)
														def run_in_graph_mode(*_snake_case   ,**_snake_case						):
																					return func(*_snake_case   ,**_snake_case						)

														if do_eager_mode is True:
																					if use_xla is not False:
																												raise ValueError(
																												    """Cannot run model in XLA, if `args.eager_mode` is set to `True`. Please set `args.eager_mode=False`."""						)
																					return run_in_eager_mode
														else:
																					return run_in_graph_mode

							return run_func

def lowercase_  (   _snake_case   ,_snake_case   ,_snake_case						):
							SCREAMING_SNAKE_CASE__						:       Dict           =   random.Random()
							SCREAMING_SNAKE_CASE__						:       Union[str, Any]           =   [rng.randint(0   ,vocab_size - 1						) for i in range(batch_size * sequence_length						)]
							return tf.constant(_snake_case   ,shape=(batch_size, sequence_length)   ,dtype=tf.intaa						)



class 	lowerCAmelCase_						(a__  ):


				"""simple docstring"""



				__UpperCamelCase      :						TensorFlowBenchmarkArguments
				__UpperCamelCase      :						PretrainedConfig
				__UpperCamelCase      :						str					       =   "TensorFlow"



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



											"""simple docstring"""




											return tf.__version__



				def 	__magic_name__    (self   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )					->		float:



											"""simple docstring"""




											SCREAMING_SNAKE_CASE__						:       Dict           =   self.args.strategy
											if strategy is None:
																		raise ValueError("""A device strategy has to be initialized before using TensorFlow."""    )
											SCREAMING_SNAKE_CASE__						:       Dict           =   self._prepare_inference_func(SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )
											return self._measure_speed(_inference    )



				def 	__magic_name__    (self   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )					->		float:



											"""simple docstring"""




											SCREAMING_SNAKE_CASE__						:       Optional[int]           =   self.args.strategy
											if strategy is None:
																		raise ValueError("""A device strategy has to be initialized before using TensorFlow."""    )
											SCREAMING_SNAKE_CASE__						:       Optional[Any]           =   self._prepare_train_func(SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )
											return self._measure_speed(_train    )



				def 	__magic_name__    (self   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )					->		[Memory, Optional[MemorySummary]]:



											"""simple docstring"""




											if self.args.is_gpu:
																		tf.config.experimental.set_memory_growth(self.args.gpu_list[self.args.device_idx]   ,       SCREAMING_SNAKE_CASE__    )
											SCREAMING_SNAKE_CASE__						:       Tuple           =   self.args.strategy
											if strategy is None:
																		raise ValueError("""A device strategy has to be initialized before using TensorFlow."""    )
											SCREAMING_SNAKE_CASE__						:       Dict           =   self._prepare_inference_func(SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )
											return self._measure_memory(_inference    )



				def 	__magic_name__    (self   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )					->		[Memory, Optional[MemorySummary]]:



											"""simple docstring"""




											if self.args.is_gpu:
																		tf.config.experimental.set_memory_growth(self.args.gpu_list[self.args.device_idx]   ,       SCREAMING_SNAKE_CASE__    )
											SCREAMING_SNAKE_CASE__						:       Optional[int]           =   self.args.strategy
											if strategy is None:
																		raise ValueError("""A device strategy has to be initialized before using TensorFlow."""    )

											SCREAMING_SNAKE_CASE__						:       List[str]           =   self._prepare_train_func(SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )
											return self._measure_memory(_train    )



				def 	__magic_name__    (self   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )					->		Callable[[], None]:



											"""simple docstring"""




											SCREAMING_SNAKE_CASE__						:       Optional[Any]           =   self.config_dict[model_name]

											if self.args.fpaa:
																		raise NotImplementedError("""Mixed precision is currently not supported."""    )

											SCREAMING_SNAKE_CASE__						:       Optional[int]           =   (
											    hasattr(SCREAMING_SNAKE_CASE__   ,       """architectures"""    )
											    and isinstance(config.architectures   ,       SCREAMING_SNAKE_CASE__    )
											    and len(config.architectures    ) > 0
											)
											if not self.args.only_pretrain_model and has_model_class_in_config:
																		try:
																									SCREAMING_SNAKE_CASE__						:       Any           =   """TF""" + config.architectures[0]  # prepend 'TF' for tensorflow model
																									SCREAMING_SNAKE_CASE__						:       Union[str, Any]           =   __import__("""transformers"""   ,       fromlist=[model_class]    )
																									SCREAMING_SNAKE_CASE__						:       Any           =   getattr(SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )
																									SCREAMING_SNAKE_CASE__						:       List[str]           =   model_cls(SCREAMING_SNAKE_CASE__    )
																		except ImportError:
																									raise ImportError(
																									    F'''{model_class} does not exist. If you just want to test the pretrained model, you might want to'''
																									    """ set `--only_pretrain_model` or `args.only_pretrain_model=True`."""    )
											else:
																		SCREAMING_SNAKE_CASE__						:       str           =   TF_MODEL_MAPPING[config.__class__](SCREAMING_SNAKE_CASE__    )

											# encoder-decoder has vocab size saved differently
											SCREAMING_SNAKE_CASE__						:       int           =   config.vocab_size if hasattr(SCREAMING_SNAKE_CASE__   ,       """vocab_size"""    ) else config.encoder.vocab_size
											SCREAMING_SNAKE_CASE__						:       List[str]           =   random_input_ids(SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )

											@run_with_tf_optimizations(self.args.eager_mode   ,       self.args.use_xla    )
											def encoder_decoder_forward():
																		return model(SCREAMING_SNAKE_CASE__   ,       decoder_input_ids=SCREAMING_SNAKE_CASE__   ,       training=SCREAMING_SNAKE_CASE__    )

											@run_with_tf_optimizations(self.args.eager_mode   ,       self.args.use_xla    )
											def encoder_forward():
																		return model(SCREAMING_SNAKE_CASE__   ,       training=SCREAMING_SNAKE_CASE__    )

											SCREAMING_SNAKE_CASE__						:       Any           =   encoder_decoder_forward if config.is_encoder_decoder else encoder_forward

											return _inference



				def 	__magic_name__    (self   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )					->		Callable[[], None]:



											"""simple docstring"""




											SCREAMING_SNAKE_CASE__						:       Optional[Any]           =   self.config_dict[model_name]

											if self.args.eager_mode is not False:
																		raise ValueError("""Training cannot be done in eager mode. Please make sure that `args.eager_mode = False`."""    )

											if self.args.fpaa:
																		raise NotImplementedError("""Mixed precision is currently not supported."""    )

											SCREAMING_SNAKE_CASE__						:       List[str]           =   (
											    hasattr(SCREAMING_SNAKE_CASE__   ,       """architectures"""    )
											    and isinstance(config.architectures   ,       SCREAMING_SNAKE_CASE__    )
											    and len(config.architectures    ) > 0
											)
											if not self.args.only_pretrain_model and has_model_class_in_config:
																		try:
																									SCREAMING_SNAKE_CASE__						:       Any           =   """TF""" + config.architectures[0]  # prepend 'TF' for tensorflow model
																									SCREAMING_SNAKE_CASE__						:       List[str]           =   __import__("""transformers"""   ,       fromlist=[model_class]    )
																									SCREAMING_SNAKE_CASE__						:       Tuple           =   getattr(SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )
																									SCREAMING_SNAKE_CASE__						:       str           =   model_cls(SCREAMING_SNAKE_CASE__    )
																		except ImportError:
																									raise ImportError(
																									    F'''{model_class} does not exist. If you just want to test the pretrained model, you might want to'''
																									    """ set `--only_pretrain_model` or `args.only_pretrain_model=True`."""    )
											else:
																		SCREAMING_SNAKE_CASE__						:       Optional[Any]           =   TF_MODEL_WITH_LM_HEAD_MAPPING[config.__class__](SCREAMING_SNAKE_CASE__    )

											# encoder-decoder has vocab size saved differently
											SCREAMING_SNAKE_CASE__						:       List[Any]           =   config.vocab_size if hasattr(SCREAMING_SNAKE_CASE__   ,       """vocab_size"""    ) else config.encoder.vocab_size
											SCREAMING_SNAKE_CASE__						:       int           =   random_input_ids(SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    )

											@run_with_tf_optimizations(self.args.eager_mode   ,       self.args.use_xla    )
											def encoder_decoder_train():
																		SCREAMING_SNAKE_CASE__						:       Optional[int]           =   model(SCREAMING_SNAKE_CASE__   ,       decoder_input_ids=SCREAMING_SNAKE_CASE__   ,       labels=SCREAMING_SNAKE_CASE__   ,       training=SCREAMING_SNAKE_CASE__    )[0]
																		SCREAMING_SNAKE_CASE__						:       Any           =   tf.gradients(SCREAMING_SNAKE_CASE__   ,       model.trainable_variables    )
																		return gradients

											@run_with_tf_optimizations(self.args.eager_mode   ,       self.args.use_xla    )
											def encoder_train():
																		SCREAMING_SNAKE_CASE__						:       Dict           =   model(SCREAMING_SNAKE_CASE__   ,       labels=SCREAMING_SNAKE_CASE__   ,       training=SCREAMING_SNAKE_CASE__    )[0]
																		SCREAMING_SNAKE_CASE__						:       Any           =   tf.gradients(SCREAMING_SNAKE_CASE__   ,       model.trainable_variables    )
																		return gradients

											SCREAMING_SNAKE_CASE__						:       Any           =   encoder_decoder_train if config.is_encoder_decoder else encoder_train

											return _train



				def 	__magic_name__    (self   ,       SCREAMING_SNAKE_CASE__    )					->		float:



											"""simple docstring"""




											with self.args.strategy.scope():
																		try:
																									if self.args.is_tpu or self.args.use_xla:
																																# run additional 10 times to stabilize compilation for tpu
																																logger.info("""Do inference on TPU. Running model 5 times to stabilize compilation"""    )
																																timeit.repeat(SCREAMING_SNAKE_CASE__   ,       repeat=1   ,       number=5    )

																									# as written in https://docs.python.org/2/library/timeit.html#timeit.Timer.repeat, min should be taken rather than the average
																									SCREAMING_SNAKE_CASE__						:       Optional[int]           =   timeit.repeat(
																									    SCREAMING_SNAKE_CASE__   ,       repeat=self.args.repeat   ,       number=10   ,       )

																									return min(SCREAMING_SNAKE_CASE__    ) / 10.0
																		except ResourceExhaustedError as e:
																									self.print_fn(F'''Doesn\'t fit on GPU. {e}'''    )



				def 	__magic_name__    (self   ,       SCREAMING_SNAKE_CASE__    )					->		[Memory, MemorySummary]:



											"""simple docstring"""




											logger.info(
											    """Note that TensorFlow allocates more memory than """
											    """it might need to speed up computation. """
											    """The memory reported here corresponds to the memory """
											    """reported by `nvidia-smi`, which can vary depending """
											    """on total available memory on the GPU that is used."""    )
											with self.args.strategy.scope():
																		try:
																									if self.args.trace_memory_line_by_line:
																																if not self.args.eager_mode:
																																							raise ValueError(
																																							    """`args.eager_mode` is set to `False`. Make sure to run model in eager mode to measure memory"""
																																							    """ consumption line by line."""    )
																																SCREAMING_SNAKE_CASE__						:       Optional[int]           =   start_memory_tracing("""transformers"""    )

																									if self.args.is_tpu:
																																# tpu
																																raise NotImplementedError(
																																    """Memory Benchmarking is currently not implemented for TPU. Please disable memory benchmarking"""
																																    """ with `args.memory=False`"""    )
																									elif self.args.is_gpu:
																																# gpu
																																if not is_pyanvml_available():
																																							logger.warning(
																																							    """py3nvml not installed, we won't log GPU memory usage. """
																																							    """Install py3nvml (pip install py3nvml) to log information about GPU."""    )
																																							SCREAMING_SNAKE_CASE__						:       Union[str, Any]           =   """N/A"""
																																else:
																																							logger.info(
																																							    """Measuring total GPU usage on GPU device. Make sure to not have additional processes"""
																																							    """ running on the same GPU."""    )
																																							# init nvml
																																							nvml.nvmlInit()
																																							func()
																																							SCREAMING_SNAKE_CASE__						:       List[Any]           =   nvml.nvmlDeviceGetHandleByIndex(self.args.device_idx    )
																																							SCREAMING_SNAKE_CASE__						:       Union[str, Any]           =   nvml.nvmlDeviceGetMemoryInfo(SCREAMING_SNAKE_CASE__    )
																																							SCREAMING_SNAKE_CASE__						:       Optional[int]           =   meminfo.used
																																							SCREAMING_SNAKE_CASE__						:       str           =   Memory(SCREAMING_SNAKE_CASE__    )
																																							# shutdown nvml
																																							nvml.nvmlShutdown()
																									else:
																																# cpu
																																if self.args.trace_memory_line_by_line:
																																							logger.info(
																																							    """When enabling line by line tracing, the max peak memory for CPU is inaccurate in"""
																																							    """ TensorFlow."""    )
																																							SCREAMING_SNAKE_CASE__						:       Any           =   None
																																else:
																																							SCREAMING_SNAKE_CASE__						:       List[Any]           =   measure_peak_memory_cpu(SCREAMING_SNAKE_CASE__    )
																																							SCREAMING_SNAKE_CASE__						:       Optional[Any]           =   Memory(SCREAMING_SNAKE_CASE__    ) if isinstance(SCREAMING_SNAKE_CASE__   ,       SCREAMING_SNAKE_CASE__    ) else memory_bytes
																									if self.args.trace_memory_line_by_line:
																																SCREAMING_SNAKE_CASE__						:       List[Any]           =   stop_memory_tracing(SCREAMING_SNAKE_CASE__    )
																																if memory is None:
																																							SCREAMING_SNAKE_CASE__						:       Optional[int]           =   summary.total
																									else:
																																SCREAMING_SNAKE_CASE__						:       Optional[Any]           =   None

																									return memory, summary
																		except ResourceExhaustedError as e:
																									self.print_fn(F'''Doesn\'t fit on GPU. {e}'''    )
																									return "N/A", None






"""simple docstring"""




UpperCAmelCase__      :    List[str]    							= [
    9_9_9,
    8_0_0,
    7_9_9,
    6_0_0,
    5_9_9,
    5_0_0,
    4_0_0,
    3_9_9,
    3_7_7,
    3_5_5,
    3_3_3,
    3_1_1,
    2_8_8,
    2_6_6,
    2_4_4,
    2_2_2,
    2_0_0,
    1_9_9,
    1_7_7,
    1_5_5,
    1_3_3,
    1_1_1,
    8_8,
    6_6,
    4_4,
    2_2,
    0,
]

UpperCAmelCase__      :    int    							= [
    9_9_9,
    9_7_6,
    9_5_2,
    9_2_8,
    9_0_5,
    8_8_2,
    8_5_8,
    8_5_7,
    8_1_0,
    7_6_2,
    7_1_5,
    7_1_4,
    5_7_2,
    4_2_9,
    4_2_8,
    2_8_6,
    2_8_5,
    2_3_8,
    1_9_0,
    1_4_3,
    1_4_2,
    1_1_8,
    9_5,
    7_1,
    4_7,
    2_4,
    0,
]

UpperCAmelCase__      :    int    							= [
    9_9_9,
    9_8_8,
    9_7_7,
    9_6_6,
    9_5_5,
    9_4_4,
    9_3_3,
    9_2_2,
    9_1_1,
    9_0_0,
    8_9_9,
    8_7_9,
    8_5_9,
    8_4_0,
    8_2_0,
    8_0_0,
    7_9_9,
    7_6_6,
    7_3_3,
    7_0_0,
    6_9_9,
    6_5_0,
    6_0_0,
    5_9_9,
    5_0_0,
    4_9_9,
    4_0_0,
    3_9_9,
    3_5_0,
    3_0_0,
    2_9_9,
    2_6_6,
    2_3_3,
    2_0_0,
    1_9_9,
    1_7_9,
    1_5_9,
    1_4_0,
    1_2_0,
    1_0_0,
    9_9,
    8_8,
    7_7,
    6_6,
    5_5,
    4_4,
    3_3,
    2_2,
    1_1,
    0,
]

UpperCAmelCase__      :    int    							= [
    9_9_9,
    9_9_5,
    9_9_2,
    9_8_9,
    9_8_5,
    9_8_1,
    9_7_8,
    9_7_5,
    9_7_1,
    9_6_7,
    9_6_4,
    9_6_1,
    9_5_7,
    9_5_6,
    9_5_1,
    9_4_7,
    9_4_2,
    9_3_7,
    9_3_3,
    9_2_8,
    9_2_3,
    9_1_9,
    9_1_4,
    9_1_3,
    9_0_8,
    9_0_3,
    8_9_7,
    8_9_2,
    8_8_7,
    8_8_1,
    8_7_6,
    8_7_1,
    8_7_0,
    8_6_4,
    8_5_8,
    8_5_2,
    8_4_6,
    8_4_0,
    8_3_4,
    8_2_8,
    8_2_7,
    8_2_0,
    8_1_3,
    8_0_6,
    7_9_9,
    7_9_2,
    7_8_5,
    7_8_4,
    7_7_7,
    7_7_0,
    7_6_3,
    7_5_6,
    7_4_9,
    7_4_2,
    7_4_1,
    7_3_3,
    7_2_4,
    7_1_6,
    7_0_7,
    6_9_9,
    6_9_8,
    6_8_8,
    6_7_7,
    6_6_6,
    6_5_6,
    6_5_5,
    6_4_5,
    6_3_4,
    6_2_3,
    6_1_3,
    6_1_2,
    5_9_8,
    5_8_4,
    5_7_0,
    5_6_9,
    5_5_5,
    5_4_1,
    5_2_7,
    5_2_6,
    5_0_5,
    4_8_4,
    4_8_3,
    4_6_2,
    4_4_0,
    4_3_9,
    3_9_6,
    3_9_5,
    3_5_2,
    3_5_1,
    3_0_8,
    3_0_7,
    2_6_4,
    2_6_3,
    2_2_0,
    2_1_9,
    1_7_6,
    1_3_2,
    8_8,
    4_4,
    0,
]

UpperCAmelCase__      :    Tuple    							= [
    9_9_9,
    9_9_7,
    9_9_5,
    9_9_2,
    9_9_0,
    9_8_8,
    9_8_6,
    9_8_4,
    9_8_1,
    9_7_9,
    9_7_7,
    9_7_5,
    9_7_2,
    9_7_0,
    9_6_8,
    9_6_6,
    9_6_4,
    9_6_1,
    9_5_9,
    9_5_7,
    9_5_6,
    9_5_4,
    9_5_1,
    9_4_9,
    9_4_6,
    9_4_4,
    9_4_1,
    9_3_9,
    9_3_6,
    9_3_4,
    9_3_1,
    9_2_9,
    9_2_6,
    9_2_4,
    9_2_1,
    9_1_9,
    9_1_6,
    9_1_4,
    9_1_3,
    9_1_0,
    9_0_7,
    9_0_5,
    9_0_2,
    8_9_9,
    8_9_6,
    8_9_3,
    8_9_1,
    8_8_8,
    8_8_5,
    8_8_2,
    8_7_9,
    8_7_7,
    8_7_4,
    8_7_1,
    8_7_0,
    8_6_7,
    8_6_4,
    8_6_1,
    8_5_8,
    8_5_5,
    8_5_2,
    8_4_9,
    8_4_6,
    8_4_3,
    8_4_0,
    8_3_7,
    8_3_4,
    8_3_1,
    8_2_8,
    8_2_7,
    8_2_4,
    8_2_1,
    8_1_7,
    8_1_4,
    8_1_1,
    8_0_8,
    8_0_4,
    8_0_1,
    7_9_8,
    7_9_5,
    7_9_1,
    7_8_8,
    7_8_5,
    7_8_4,
    7_8_0,
    7_7_7,
    7_7_4,
    7_7_0,
    7_6_6,
    7_6_3,
    7_6_0,
    7_5_6,
    7_5_2,
    7_4_9,
    7_4_6,
    7_4_2,
    7_4_1,
    7_3_7,
    7_3_3,
    7_3_0,
    7_2_6,
    7_2_2,
    7_1_8,
    7_1_4,
    7_1_0,
    7_0_7,
    7_0_3,
    6_9_9,
    6_9_8,
    6_9_4,
    6_9_0,
    6_8_5,
    6_8_1,
    6_7_7,
    6_7_3,
    6_6_9,
    6_6_4,
    6_6_0,
    6_5_6,
    6_5_5,
    6_5_0,
    6_4_6,
    6_4_1,
    6_3_6,
    6_3_2,
    6_2_7,
    6_2_2,
    6_1_8,
    6_1_3,
    6_1_2,
    6_0_7,
    6_0_2,
    5_9_6,
    5_9_1,
    5_8_6,
    5_8_0,
    5_7_5,
    5_7_0,
    5_6_9,
    5_6_3,
    5_5_7,
    5_5_1,
    5_4_5,
    5_3_9,
    5_3_3,
    5_2_7,
    5_2_6,
    5_1_9,
    5_1_2,
    5_0_5,
    4_9_8,
    4_9_1,
    4_8_4,
    4_8_3,
    4_7_4,
    4_6_6,
    4_5_7,
    4_4_9,
    4_4_0,
    4_3_9,
    4_2_8,
    4_1_8,
    4_0_7,
    3_9_6,
    3_9_5,
    3_8_1,
    3_6_6,
    3_5_2,
    3_5_1,
    3_3_0,
    3_0_8,
    3_0_7,
    2_8_6,
    2_6_4,
    2_6_3,
    2_4_2,
    2_2_0,
    2_1_9,
    1_7_6,
    1_7_5,
    1_3_2,
    1_3_1,
    8_8,
    4_4,
    0,
]

UpperCAmelCase__      :    Union[str, Any]    							= [
    9_9_9,
    9_9_1,
    9_8_2,
    9_7_4,
    9_6_6,
    9_5_8,
    9_5_0,
    9_4_1,
    9_3_3,
    9_2_5,
    9_1_6,
    9_0_8,
    9_0_0,
    8_9_9,
    8_7_4,
    8_5_0,
    8_2_5,
    8_0_0,
    7_9_9,
    7_0_0,
    6_0_0,
    5_0_0,
    4_0_0,
    3_0_0,
    2_0_0,
    1_0_0,
    0,
]

UpperCAmelCase__      :    str    							= [
    9_9_9,
    9_9_2,
    9_8_5,
    9_7_8,
    9_7_1,
    9_6_4,
    9_5_7,
    9_4_9,
    9_4_2,
    9_3_5,
    9_2_8,
    9_2_1,
    9_1_4,
    9_0_7,
    9_0_0,
    8_9_9,
    8_7_9,
    8_5_9,
    8_4_0,
    8_2_0,
    8_0_0,
    7_9_9,
    7_6_6,
    7_3_3,
    7_0_0,
    6_9_9,
    6_5_0,
    6_0_0,
    5_9_9,
    5_0_0,
    4_9_9,
    4_0_0,
    3_9_9,
    3_0_0,
    2_9_9,
    2_0_0,
    1_9_9,
    1_0_0,
    9_9,
    0,
]

UpperCAmelCase__      :    str    							= [
    9_9_9,
    9_9_6,
    9_9_2,
    9_8_9,
    9_8_5,
    9_8_2,
    9_7_9,
    9_7_5,
    9_7_2,
    9_6_8,
    9_6_5,
    9_6_1,
    9_5_8,
    9_5_5,
    9_5_1,
    9_4_8,
    9_4_4,
    9_4_1,
    9_3_8,
    9_3_4,
    9_3_1,
    9_2_7,
    9_2_4,
    9_2_0,
    9_1_7,
    9_1_4,
    9_1_0,
    9_0_7,
    9_0_3,
    9_0_0,
    8_9_9,
    8_9_1,
    8_8_4,
    8_7_6,
    8_6_9,
    8_6_1,
    8_5_3,
    8_4_6,
    8_3_8,
    8_3_0,
    8_2_3,
    8_1_5,
    8_0_8,
    8_0_0,
    7_9_9,
    7_8_8,
    7_7_7,
    7_6_6,
    7_5_5,
    7_4_4,
    7_3_3,
    7_2_2,
    7_1_1,
    7_0_0,
    6_9_9,
    6_8_8,
    6_7_7,
    6_6_6,
    6_5_5,
    6_4_4,
    6_3_3,
    6_2_2,
    6_1_1,
    6_0_0,
    5_9_9,
    5_8_5,
    5_7_1,
    5_5_7,
    5_4_2,
    5_2_8,
    5_1_4,
    5_0_0,
    4_9_9,
    4_8_5,
    4_7_1,
    4_5_7,
    4_4_2,
    4_2_8,
    4_1_4,
    4_0_0,
    3_9_9,
    3_7_9,
    3_5_9,
    3_4_0,
    3_2_0,
    3_0_0,
    2_9_9,
    2_7_9,
    2_5_9,
    2_4_0,
    2_2_0,
    2_0_0,
    1_9_9,
    1_6_6,
    1_3_3,
    1_0_0,
    9_9,
    6_6,
    3_3,
    0,
]




