

'''simple docstring'''
import sys

from .dependency_versions_table import deps
from .utils.versions import require_version, require_version_core


# define which module versions we always want to check at run time
# (usually the ones defined in `install_requires` in setup.py)
#
# order specific notes:
# - tqdm must be checked before tokenizers

_snake_case         =  'python tqdm regex requests packaging filelock numpy tokenizers'.split()
if sys.version_info < (3, 7):
    pkgs_to_check_at_runtime.append('dataclasses')
if sys.version_info < (3, 8):
    pkgs_to_check_at_runtime.append('importlib_metadata')

for pkg in pkgs_to_check_at_runtime:
    if pkg in deps:
        if pkg == "tokenizers":
            # must be loaded here, or else tqdm check may fail
            from .utils import is_tokenizers_available

            if not is_tokenizers_available():
                continue  # not required, check version only if installed

        require_version_core(deps[pkg])
    else:
        raise ValueError(F'''can\'t find {pkg} in {deps.keys()}, check dependency_versions_table.py''')







def  _A		(     snake_case		,							snake_case=None					)      ->     Dict:
   require_version(deps[pkg]		,							snake_case					)






'''simple docstring'''
from timeit import timeit







def  _A		(     snake_case					)      ->     int:
   if number < 0:
      raise ValueError("the value of input must not be negative"					)
   _lowercase      :				Union[str, Any]      					=       0
   while number:
      number &= number - 1
      result += 1
   return result







def  _A		(     snake_case					)      ->     int:
   if number < 0:
      raise ValueError("the value of input must not be negative"					)
   _lowercase      :				int      					=       0
   while number:
      if number % 2 == 1:
         result += 1
      number >>= 1
   return result







def  _A		(     )      ->     None:

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

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


if __name__ == "__main__":
    import doctest

    doctest.testmod()
    benchmark()






