



from typing import TYPE_CHECKING

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


UpperCAmelCase__			:   Optional[Any]      			=    {'configuration_t5': ['T5_PRETRAINED_CONFIG_ARCHIVE_MAP', 'T5Config', 'T5OnnxConfig']}

try:
					if not is_sentencepiece_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					UpperCAmelCase__			:   Union[str, Any]      			=    ['T5Tokenizer']

try:
					if not is_tokenizers_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					UpperCAmelCase__			:   Any      			=    ['T5TokenizerFast']

try:
					if not is_torch_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					UpperCAmelCase__			:   int      			=    [
					    'T5_PRETRAINED_MODEL_ARCHIVE_LIST',
					    'T5EncoderModel',
					    'T5ForConditionalGeneration',
					    'T5Model',
					    'T5PreTrainedModel',
					    'load_tf_weights_in_t5',
					    'T5ForQuestionAnswering',
					]

try:
					if not is_tf_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					UpperCAmelCase__			:   int      			=    [
					    'TF_T5_PRETRAINED_MODEL_ARCHIVE_LIST',
					    'TFT5EncoderModel',
					    'TFT5ForConditionalGeneration',
					    'TFT5Model',
					    'TFT5PreTrainedModel',
					]

try:
					if not is_flax_available():
										raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
					pass
else:
					UpperCAmelCase__			:   str      			=    [
					    'FlaxT5EncoderModel',
					    'FlaxT5ForConditionalGeneration',
					    'FlaxT5Model',
					    'FlaxT5PreTrainedModel',
					]


if TYPE_CHECKING:
					from .configuration_ta import T5_PRETRAINED_CONFIG_ARCHIVE_MAP, TaConfig, TaOnnxConfig

					try:
										if not is_sentencepiece_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .tokenization_ta import TaTokenizer

					try:
										if not is_tokenizers_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .tokenization_ta_fast import TaTokenizerFast

					try:
										if not is_torch_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .modeling_ta import (
										    T5_PRETRAINED_MODEL_ARCHIVE_LIST,
										    TaEncoderModel,
										    TaForConditionalGeneration,
										    TaForQuestionAnswering,
										    TaModel,
										    TaPreTrainedModel,
										    load_tf_weights_in_ta,
										)

					try:
										if not is_tf_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .modeling_tf_ta import (
										    TF_T5_PRETRAINED_MODEL_ARCHIVE_LIST,
										    TFTaEncoderModel,
										    TFTaForConditionalGeneration,
										    TFTaModel,
										    TFTaPreTrainedModel,
										)

					try:
										if not is_flax_available():
															raise OptionalDependencyNotAvailable()
					except OptionalDependencyNotAvailable:
										pass
					else:
										from .modeling_flax_ta import (
										    FlaxTaEncoderModel,
										    FlaxTaForConditionalGeneration,
										    FlaxTaModel,
										    FlaxTaPreTrainedModel,
										)


else:
					import sys

					UpperCAmelCase__			:   List[Any]      			=    _LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)





import math
from timeit import timeit


def 	_A	(   _UpperCamelCase			):
				_UpperCAmelCase						:  str     					=	0
				_UpperCAmelCase						:  Tuple     					=	abs(_UpperCamelCase			)
				while True:
								_UpperCAmelCase						:  str     					=	n // 10
								digits += 1
								if n == 0:
												break
				return digits


def 	_A	(   _UpperCamelCase			):
				return 1 if n == 0 else math.floor(math.log(abs(_UpperCamelCase			)      ,					10			) + 1			)


def 	_A	(   _UpperCamelCase			):
				return len(str(abs(_UpperCamelCase			)			)			)


def 	_A	(   ):
				from collections.abc import Callable

				def benchmark_a_function(_UpperCamelCase      ,					_UpperCamelCase			) -> None:
								_UpperCAmelCase						:  List[str]     					=	F'''{func.__name__}({value})'''
								_UpperCAmelCase						:  Any     					=	timeit(F'''__main__.{call}'''      ,					setup='''import __main__'''			)
								print(F'''{call}: {func(_UpperCamelCase			)} -- {timing} seconds'''			)

				for value in (262_144, 1_125_899_906_842_624, 1_267_650_600_228_229_401_496_703_205_376):
								for func in (num_digits, num_digits_fast, num_digits_faster):
												benchmark_a_function(_UpperCamelCase      ,					_UpperCamelCase			)
								print()


if __name__ == "__main__":
					import doctest

					doctest.testmod()
					benchmark()
