






import colorsys

from PIL import Image  # type: ignore



def 					_lowerCamelCase(			lowerCAmelCase__				:		float    ,    lowerCAmelCase__				:		float    ,    lowerCAmelCase__				:		int      ):





    '''simple docstring'''







    SCREAMING_SNAKE_CASE_   :	Any													=   x
    SCREAMING_SNAKE_CASE_   :	Tuple													=   y
    for step in range(lowerCAmelCase__      ):  # noqa: B007
        SCREAMING_SNAKE_CASE_   :	str													=   a * a - b * b + x
        SCREAMING_SNAKE_CASE_   :	Any													=   2 * a * b + y
        SCREAMING_SNAKE_CASE_   :	int													=   a_new

        # divergence happens for all complex number with an absolute value
        # greater than 4
        if a * a + b * b > 4:
            break
    return step / (max_step - 1)



def 					_lowerCamelCase(			lowerCAmelCase__				:		float      ):





    '''simple docstring'''







    if distance == 1:
        return (0, 0, 0)
    else:
        return (255, 255, 255)



def 					_lowerCamelCase(			lowerCAmelCase__				:		float      ):





    '''simple docstring'''







    if distance == 1:
        return (0, 0, 0)
    else:
        return tuple(round(i * 255      ) for i in colorsys.hsv_to_rgb(lowerCAmelCase__    ,    1    ,    1      )      )



def 					_lowerCamelCase(			lowerCAmelCase__				:		int = 800    ,    lowerCAmelCase__				:		int = 600    ,    lowerCAmelCase__				:		float = -0.6    ,    lowerCAmelCase__				:		float = 0    ,    lowerCAmelCase__				:		float = 3.2    ,    lowerCAmelCase__				:		int = 50    ,    lowerCAmelCase__				:		bool = True    ,    ):





    '''simple docstring'''







    SCREAMING_SNAKE_CASE_   :	Optional[Any]													=   Image.new('RGB'    ,    (image_width, image_height)      )
    SCREAMING_SNAKE_CASE_   :	List[str]													=   img.load()

    # loop through the image-coordinates
    for image_x in range(lowerCAmelCase__      ):
        for image_y in range(lowerCAmelCase__      ):
            # determine the figure-coordinates based on the image-coordinates
            SCREAMING_SNAKE_CASE_   :	List[str]													=   figure_width / image_width * image_height
            SCREAMING_SNAKE_CASE_   :	List[Any]													=   figure_center_x + (image_x / image_width - 0.5) * figure_width
            SCREAMING_SNAKE_CASE_   :	Optional[Any]													=   figure_center_y + (image_y / image_height - 0.5) * figure_height

            SCREAMING_SNAKE_CASE_   :	str													=   get_distance(lowerCAmelCase__    ,    lowerCAmelCase__    ,    lowerCAmelCase__      )

            # color the corresponding pixel based on the selected coloring-function
            if use_distance_color_coding:
                SCREAMING_SNAKE_CASE_   :	int													=   get_color_coded_rgb(lowerCAmelCase__      )
            else:
                SCREAMING_SNAKE_CASE_   :	Dict													=   get_black_and_white_rgb(lowerCAmelCase__      )

    return img


if __name__ == "__main__":
    import doctest

    doctest.testmod()

    # colored version, full figure
    A        =			get_image()

    # uncomment for colored version, different section, zoomed in
    # img = get_image(figure_center_x = -0.6, figure_center_y = -0.4,
    # figure_width = 0.8)

    # uncomment for black and white version, full figure
    # img = get_image(use_distance_color_coding = False)

    # uncomment to save the image
    # img.save("mandelbrot.png")

    img.show()







from timeit import timeit



def 					_lowerCamelCase(			lowerCAmelCase__				:		int      ):





				'''simple docstring'''







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



def 					_lowerCamelCase(			lowerCAmelCase__				:		int      ):





				'''simple docstring'''







				if number < 0:
								raise ValueError('the value of input must not be negative'      )
				SCREAMING_SNAKE_CASE_   :	Optional[Any]													=   0
				while number:
								if number % 2 == 1:
												result += 1
								number >>= 1
				return result



def 					_lowerCamelCase(			):





				'''simple docstring'''







				def do_benchmark(lowerCAmelCase__				:		int      ) -> None:
								SCREAMING_SNAKE_CASE_   :	int													=   'import __main__ as z'
								print(F'''Benchmark when {number = }:'''      )
								print(F'''{get_set_bits_count_using_modulo_operator(lowerCAmelCase__      ) = }'''      )
								SCREAMING_SNAKE_CASE_   :	int													=   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__      ) = }'''      )
								SCREAMING_SNAKE_CASE_   :	Optional[Any]													=   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()