

import math
from timeit import timeit




def        lowerCAmelCase(	SCREAMING_SNAKE_CASE_       )->		int:



    """simple docstring"""






    UpperCamelCase_          =		0
    UpperCamelCase_          =		abs(SCREAMING_SNAKE_CASE_       )
    while True:
        UpperCamelCase_          =		n // 1_0
        digits += 1
        if n == 0:
            break
    return digits




def        lowerCAmelCase(	SCREAMING_SNAKE_CASE_       )->		int:



    """simple docstring"""






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




def        lowerCAmelCase(	SCREAMING_SNAKE_CASE_       )->		int:



    """simple docstring"""






    return len(str(abs(SCREAMING_SNAKE_CASE_       )       )       )




def        lowerCAmelCase(	)->		None:



    """simple docstring"""






    from collections.abc import Callable

    def benchmark_a_function(SCREAMING_SNAKE_CASE_       ,		SCREAMING_SNAKE_CASE_       ) -> None:
        UpperCamelCase_          =		f"{func.__name__}({value})"
        UpperCamelCase_          =		timeit(f"__main__.{call}"       ,		setup="import __main__"       )
        print(f"{call}: {func(SCREAMING_SNAKE_CASE_       )} -- {timing} seconds"       )

    for value in (2_6_2_1_4_4, 1_1_2_5_8_9_9_9_0_6_8_4_2_6_2_4, 1_2_6_7_6_5_0_6_0_0_2_2_8_2_2_9_4_0_1_4_9_6_7_0_3_2_0_5_3_7_6):
        for func in (num_digits, num_digits_fast, num_digits_faster):
            benchmark_a_function(SCREAMING_SNAKE_CASE_       ,		SCREAMING_SNAKE_CASE_       )
        print()


if __name__ == "__main__":
 import doctest

 doctest.testmod()
 benchmark()



from typing import Callable




def        lowerCAmelCase(	SCREAMING_SNAKE_CASE_       )->		List[Any]:



    """simple docstring"""






    def wrapper(SCREAMING_SNAKE_CASE_       ):
        UpperCamelCase_          =		function_with_docstring.__doc__
        return target_function

    return wrapper
