




from __future__ import annotations

from PIL import Image

# Define glider example
__A						:							Dict						      =  [
    [0, 1, 0, 0, 0, 0, 0, 0],
    [0, 0, 1, 0, 0, 0, 0, 0],
    [1, 1, 1, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
    [0, 0, 0, 0, 0, 0, 0, 0],
]

# Define blinker example
__A						:							int						      =  [[0, 1, 0], [0, 1, 0], [0, 1, 0]]
def 					lowerCamelCase_    (    SCREAMING_SNAKE_CASE   ):
			'''simple docstring'''
			SCREAMING_SNAKE_CASE           =					[]
			for i in range(len(SCREAMING_SNAKE_CASE   )   ):
						SCREAMING_SNAKE_CASE           =					[]
						for j in range(len(cells[i]   )   ):
									# Get the number of live neighbours
									SCREAMING_SNAKE_CASE           =					0
									if i > 0 and j > 0:
												neighbour_count += cells[i - 1][j - 1]
									if i > 0:
												neighbour_count += cells[i - 1][j]
									if i > 0 and j < len(cells[i]   ) - 1:
												neighbour_count += cells[i - 1][j + 1]
									if j > 0:
												neighbour_count += cells[i][j - 1]
									if j < len(cells[i]   ) - 1:
												neighbour_count += cells[i][j + 1]
									if i < len(SCREAMING_SNAKE_CASE   ) - 1 and j > 0:
												neighbour_count += cells[i + 1][j - 1]
									if i < len(SCREAMING_SNAKE_CASE   ) - 1:
												neighbour_count += cells[i + 1][j]
									if i < len(SCREAMING_SNAKE_CASE   ) - 1 and j < len(cells[i]   ) - 1:
												neighbour_count += cells[i + 1][j + 1]

									# Rules of the game of life (excerpt from Wikipedia):
									# 1. Any live cell with two or three live neighbours survives.
									# 2. Any dead cell with three live neighbours becomes a live cell.
									# 3. All other live cells die in the next generation.
									#    Similarly, all other dead cells stay dead.
									SCREAMING_SNAKE_CASE           =					cells[i][j] == 1
									if (
									    (alive and 2 <= neighbour_count <= 3)
									    or not alive
									    and neighbour_count == 3
									):
												next_generation_row.append(1   )
									else:
												next_generation_row.append(0   )

						next_generation.append(SCREAMING_SNAKE_CASE   )
			return next_generation
def 					lowerCamelCase_    (    SCREAMING_SNAKE_CASE					,	SCREAMING_SNAKE_CASE   ):
			'''simple docstring'''
			SCREAMING_SNAKE_CASE           =					[]
			for _ in range(SCREAMING_SNAKE_CASE   ):
						# Create output image
						SCREAMING_SNAKE_CASE           =					Image.new("""RGB"""					,	(len(cells[0]   ), len(SCREAMING_SNAKE_CASE   ))   )
						SCREAMING_SNAKE_CASE           =					img.load()

						# Save cells to image
						for x in range(len(SCREAMING_SNAKE_CASE   )   ):
									for y in range(len(cells[0]   )   ):
												SCREAMING_SNAKE_CASE           =					2_55 - cells[y][x] * 2_55
												SCREAMING_SNAKE_CASE           =					(colour, colour, colour)

        # Save image
						images.append(SCREAMING_SNAKE_CASE   )
						SCREAMING_SNAKE_CASE           =					new_generation(SCREAMING_SNAKE_CASE   )
			return images


if __name__ == "__main__":
		__A						:							str						      =  generate_images(GLIDER, 1_6)
		images[0].save("""out.gif""", save_all=True, append_images=images[1:])












from __future__ import annotations

import typing
from collections.abc import Iterable

import numpy as np

__A						:							Dict							=  typing.Union[Iterable[float], Iterable[int], np.ndarray]  # noqa: UP007
__A						:							Tuple							=  typing.Union[np.floataa, int, float]  # noqa: UP007
def 					lowerCamelCase_    (    SCREAMING_SNAKE_CASE					,	SCREAMING_SNAKE_CASE   ):
			'''simple docstring'''
			return np.sqrt(np.sum((np.asarray(SCREAMING_SNAKE_CASE   ) - np.asarray(SCREAMING_SNAKE_CASE   )) ** 2   )   )
def 					lowerCamelCase_    (    SCREAMING_SNAKE_CASE					,	SCREAMING_SNAKE_CASE   ):
			'''simple docstring'''
			return sum((va - va) ** 2 for va, va in zip(SCREAMING_SNAKE_CASE					,	SCREAMING_SNAKE_CASE   )   ) ** (1 / 2)


if __name__ == "__main__":
		def 					lowerCamelCase_    (    ):
					'''simple docstring'''
					from timeit import timeit

					print("""Without Numpy"""   )
					print(
					    timeit(
					        """euclidean_distance_no_np([1, 2, 3], [4, 5, 6])"""					,	number=1_00_00					,	globals=globals()					,	)   )
					print("""With Numpy"""   )
					print(
					    timeit(
					        """euclidean_distance([1, 2, 3], [4, 5, 6])"""					,	number=1_00_00					,	globals=globals()					,	)   )




		benchmark()






