



from timeit import timeit



def 	__a					(   lowerCAmelCase_       : int    )				->			int:






						'''simple docstring'''



						if number < 0:
												raise ValueError("""the value of input must not be negative"""    )
						UpperCAmelCase_=       0
						while number:
												number &= number - 1
												result += 1
						return result



def 	__a					(   lowerCAmelCase_       : int    )				->			int:






						'''simple docstring'''



						if number < 0:
												raise ValueError("""the value of input must not be negative"""    )
						UpperCAmelCase_=       0
						while number:
												if number % 2 == 1:
																		result += 1
												number >>= 1
						return result



def 	__a					(   )				->			None:






						'''simple docstring'''



						def do_benchmark(lowerCAmelCase_       : int    ) -> None:
												UpperCAmelCase_=       """import __main__ as z"""
												print(F"""Benchmark when {number = }:"""    )
												print(F"""{get_set_bits_count_using_modulo_operator(lowerCAmelCase_    ) = }"""    )
												UpperCAmelCase_=       timeit("""z.get_set_bits_count_using_modulo_operator(25)"""      ,setup=lowerCAmelCase_    )
												print(F"""timeit() runs in {timing} seconds"""    )
												print(F"""{get_set_bits_count_using_brian_kernighans_algorithm(lowerCAmelCase_    ) = }"""    )
												UpperCAmelCase_=       timeit(
												    """z.get_set_bits_count_using_brian_kernighans_algorithm(25)"""      ,setup=lowerCAmelCase_      ,)
												print(F"""timeit() runs in {timing} seconds"""    )

						for number in (25, 37, 58, 0):
												do_benchmark(lowerCAmelCase_    )
												print()


if __name__ == "__main__":
	import doctest

	doctest.testmod()
	benchmark()









import warnings
from functools import wraps
from typing import Callable



def 	__a					(   lowerCAmelCase_       : Callable    )				->			Callable:






						'''simple docstring'''



						@wraps(lowerCAmelCase_    )
						def _inner_fn(*lowerCAmelCase_       : List[Any]      ,**lowerCAmelCase_       : Tuple    ):
												warnings.warn(
												    (F"""'{fn.__name__}' is experimental and might be subject to breaking changes in the future.""")      ,lowerCAmelCase_      ,)
												return fn(*lowerCAmelCase_      ,**lowerCAmelCase_    )

						return _inner_fn




