
'''simple docstring'''
from typing import TYPE_CHECKING

from ...utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available


lowerCAmelCase :  Union[str, Any]      =      {'configuration_qdqbert': ['QDQBERT_PRETRAINED_CONFIG_ARCHIVE_MAP', 'QDQBertConfig']}

try:
						if not is_torch_available():
												raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
						pass
else:
						lowerCAmelCase :  Union[str, Any]      =      [
						    'QDQBERT_PRETRAINED_MODEL_ARCHIVE_LIST',
						    'QDQBertForMaskedLM',
						    'QDQBertForMultipleChoice',
						    'QDQBertForNextSentencePrediction',
						    'QDQBertForQuestionAnswering',
						    'QDQBertForSequenceClassification',
						    'QDQBertForTokenClassification',
						    'QDQBertLayer',
						    'QDQBertLMHeadModel',
						    'QDQBertModel',
						    'QDQBertPreTrainedModel',
						    'load_tf_weights_in_qdqbert',
						]


if TYPE_CHECKING:
						from .configuration_qdqbert import QDQBERT_PRETRAINED_CONFIG_ARCHIVE_MAP, QDQBertConfig

						try:
												if not is_torch_available():
																		raise OptionalDependencyNotAvailable()
						except OptionalDependencyNotAvailable:
												pass
						else:
												from .modeling_qdqbert import (
												    QDQBERT_PRETRAINED_MODEL_ARCHIVE_LIST,
												    QDQBertForMaskedLM,
												    QDQBertForMultipleChoice,
												    QDQBertForNextSentencePrediction,
												    QDQBertForQuestionAnswering,
												    QDQBertForSequenceClassification,
												    QDQBertForTokenClassification,
												    QDQBertLayer,
												    QDQBertLMHeadModel,
												    QDQBertModel,
												    QDQBertPreTrainedModel,
												    load_tf_weights_in_qdqbert,
												)


else:
						import sys

						lowerCAmelCase :  Dict      =      _LazyModule(__name__, globals()['__file__'], _import_structure, module_spec=__spec__)






'''simple docstring'''
from __future__ import annotations

from PIL import Image

# Define the first generation of cells
# fmt: off
lowerCAmelCase :  Union[str, Any]      =      [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
          0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]







def 						A_(			A		:						int):
							return [int(A) for c in f'''{ruleset:08}'''[:8]]







def 						A_(			A		:						list[list[int]]						,			A		:						list[int]						,			A		:						int):
							UpperCamelCase					       =			len(cells[0])  # 31
							UpperCamelCase					       =			[]
							for i in range(A):
														# Get the neighbors of each cell
														# Handle neighbours outside bounds by using 0 as their value
														UpperCamelCase					       =			0 if i == 0 else cells[time][i - 1]
														UpperCamelCase					       =			0 if i == population - 1 else cells[time][i + 1]
														# Define a new cell and add it to the new generation
														UpperCamelCase					       =			7 - int(f'''{left_neighbor}{cells[time][i]}{right_neighbor}'''						,			2)
														next_generation.append(rule[situation])
							return next_generation







def 						A_(			A		:						list[list[int]]):
							UpperCamelCase					       =			Image.new('RGB'						,			(len(cells[0]), len(A)))
							UpperCamelCase					       =			img.load()
							# Generates image
							for w in range(img.width):
														for h in range(img.height):
																					UpperCamelCase					       =			255 - int(255 * cells[h][w])
																					UpperCamelCase					       =			(color, color, color)
							return img


if __name__ == "__main__":
						lowerCAmelCase :  Optional[int]      =      bin(int(input('Rule:\n').strip()))[2:]
						lowerCAmelCase :  Tuple      =      format_ruleset(int(rule_num))
						for time in range(16):
												CELLS.append(new_generation(CELLS, rule, time))
						lowerCAmelCase :  List[str]      =      generate_image(CELLS)
						# Uncomment to save the image
						# img.save(f"rule_{rule_num}.png")
						img.show()




