





import math
from timeit import timeit







def    UpperCAmelCase				(  _lowerCamelCase   :	Any  ):





						'''simple docstring'''


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







def    UpperCAmelCase				(  _lowerCamelCase   :	Union[str, Any]  ):





						'''simple docstring'''


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







def    UpperCAmelCase				(  _lowerCamelCase   :	List[str]  ):





						'''simple docstring'''


						return len(str(abs(_UpperCamelCase  )  )  )







def    UpperCAmelCase				(  ):





						'''simple docstring'''


						from collections.abc import Callable

						def benchmark_a_function(_lowerCamelCase   :	List[str]      , _lowerCamelCase   :	Any  ) -> None:
												SCREAMING_SNAKE_CASE__  :					List[str] =       f"""{func.__name__}({value})"""
												SCREAMING_SNAKE_CASE__  :					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()




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()
