

"""simple docstring"""






from manim import *







class       snake_case__  ( lowerCAmelCase_     ):







			def 			__lowerCAmelCase				(			self			: List[Any]  ):





								'''simple docstring'''



								UpperCAmelCase			:   List[str]      =				Rectangle(height=0.5			,  width=0.5  )
								UpperCAmelCase			:   Optional[Any]      =				Rectangle(height=0.4_6			,  width=0.4_6  ).set_stroke(width=0  )

								UpperCAmelCase			:   List[str]      =				[mem.copy() for i in range(6  )]
								UpperCAmelCase			:   Dict      =				[mem.copy() for i in range(6  )]
								UpperCAmelCase			:   int      =				VGroup(*lowercase  ).arrange(lowercase			,  buff=0  )
								UpperCAmelCase			:   int      =				VGroup(*lowercase  ).arrange(lowercase			,  buff=0  )
								UpperCAmelCase			:   int      =				VGroup(lowercase			,  lowercase  ).arrange(lowercase			,  buff=0  )
								UpperCAmelCase			:   str      =				Text("CPU"			,  font_size=24  )
								UpperCAmelCase			:   Optional[Any]      =				Group(lowercase			,  lowercase  ).arrange(lowercase			,  buff=0.5			,  aligned_edge=lowercase  )
								cpu.move_to([-2.5, -0.5, 0]  )
								self.add(lowercase  )

								UpperCAmelCase			:   Optional[Any]      =				[mem.copy() for i in range(1  )]
								UpperCAmelCase			:   Optional[Any]      =				VGroup(*lowercase  ).arrange(lowercase			,  buff=0  )
								UpperCAmelCase			:   Any      =				Text("GPU"			,  font_size=24  )
								UpperCAmelCase			:   List[str]      =				Group(lowercase			,  lowercase  ).arrange(lowercase			,  buff=0.5			,  aligned_edge=lowercase  )
								gpu.align_to(lowercase			,  lowercase  )
								gpu.set_x(gpu.get_x() - 1  )

								self.add(lowercase  )

								UpperCAmelCase			:   Union[str, Any]      =				[mem.copy() for i in range(6  )]
								UpperCAmelCase			:   str      =				VGroup(*lowercase  ).arrange(lowercase			,  buff=0  )

								UpperCAmelCase			:   Dict      =				Text("Model"			,  font_size=24  )
								UpperCAmelCase			:   int      =				Group(lowercase			,  lowercase  ).arrange(lowercase			,  buff=0.5			,  aligned_edge=lowercase  )
								model.move_to([3, -1.0, 0]  )

								self.play(
								    Create(lowercase			,  run_time=1  )			,  Create(lowercase			,  run_time=1  )			,  Create(lowercase			,  run_time=1  )			,  )

								UpperCAmelCase			:   int      =				MarkupText(
								    f"""First, an empty model skeleton is loaded\ninto <span fgcolor='{YELLOW}'>memory</span> without using much RAM."""			,  font_size=24			,  )

								UpperCAmelCase			:   Union[str, Any]      =				Square(side_length=2.2  )
								key.move_to([-5, 2, 0]  )

								UpperCAmelCase			:   List[str]      =				MarkupText(
								    f"""<b>Key:</b>\n\n<span fgcolor='{YELLOW}'>●</span> Empty Model"""			,  font_size=18			,  )

								key_text.move_to([-5, 2.4, 0]  )

								step_a.move_to([2, 2, 0]  )
								self.play(Write(lowercase			,  run_time=2.5  )			,  Write(lowercase  )			,  Write(lowercase  )  )

								self.add(lowercase  )

								UpperCAmelCase			:   List[str]      =				[]
								UpperCAmelCase			:   Optional[Any]      =				[]
								UpperCAmelCase			:   List[Any]      =				[]
								for i, rect in enumerate(lowercase  ):
													UpperCAmelCase			:   Union[str, Any]      =				Rectangle(height=0.4_6			,  width=0.4_6  ).set_stroke(width=0.0  ).set_fill(lowercase			,  opacity=0.7  )
													cpu_target.move_to(lowercase  )
													cpu_target.generate_target()
													UpperCAmelCase			:   Optional[int]      =				0.4_6 / 4
													UpperCAmelCase			:   int      =				0.4_6 / 3

													if i == 0:
																		cpu_target.target.next_to(cpu_left_col_base[0].get_corner(DOWN + LEFT  )			,  buff=0.0_2			,  direction=lowercase  )
																		cpu_target.target.set_x(cpu_target.target.get_x() + 0.1  )
													elif i == 3:
																		cpu_target.target.next_to(cpu_targs[0].target			,  direction=lowercase			,  buff=0.0  )
													else:
																		cpu_target.target.next_to(cpu_targs[i - 1].target			,  direction=lowercase			,  buff=0.0  )
													cpu_targs.append(lowercase  )

													first_animations.append(rect.animate(run_time=0.5  ).set_stroke(lowercase  )  )
													second_animations.append(MoveToTarget(lowercase			,  run_time=1.5  )  )

								self.play(*lowercase  )
								self.play(*lowercase  )

								self.wait()








"""simple docstring"""






def   lowercase_	(    _lowercase       :		str	):




					'''simple docstring'''






					if not all(x.isalpha() for x in string	):
										raise ValueError("String must only contain alphabetic characters."	)

					UpperCAmelCase			:   Optional[int]      =				sorted(string.lower()	)
					return len(_lowercase	) == len(set(_lowercase	)	)


if __name__ == "__main__":
	snake_case_   :   Tuple        =       input("""Enter a string """).strip()

	snake_case_   :   str        =       is_isogram(input_str)
	print(f'''{input_str} is {"an" if isogram else "not an"} isogram.''')


