





'''simple docstring'''


from typing import TYPE_CHECKING

from ....utils import OptionalDependencyNotAvailable, _LazyModule, is_torch_available, is_vision_available


lowerCAmelCase_   :   Optional[Any]       =					{"configuration_van": ["VAN_PRETRAINED_CONFIG_ARCHIVE_MAP", "VanConfig"]}


try:
		if not is_torch_available():
				raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
		pass
else:
		lowerCAmelCase_   :   int       =					[
		    "VAN_PRETRAINED_MODEL_ARCHIVE_LIST",
		    "VanForImageClassification",
		    "VanModel",
		    "VanPreTrainedModel",
		]

if TYPE_CHECKING:
		from .configuration_van import VAN_PRETRAINED_CONFIG_ARCHIVE_MAP, VanConfig

		try:
				if not is_torch_available():
						raise OptionalDependencyNotAvailable()
		except OptionalDependencyNotAvailable:
				pass
		else:
				from .modeling_van import (
				    VAN_PRETRAINED_MODEL_ARCHIVE_LIST,
				    VanForImageClassification,
				    VanModel,
				    VanPreTrainedModel,
				)

else:
		import sys

		lowerCAmelCase_   :   List[str]       =					_LazyModule(__name__, globals()["__file__"], _import_structure)










'''simple docstring'''


from manim import *






class       UpperCamelCase__  (		__lowerCAmelCase     ):







	def 						__a   (				self			:   List[Any]		):




				'''simple docstring'''
				a__     = Rectangle(height=0.5 , width=0.5		)
				a__     = Rectangle(height=0.25 , width=0.25		)
				a__     = Rectangle(height=0.46 , width=0.46		).set_stroke(width=0		)

				a__     = [mem.copy() for i in range(6		)]
				a__     = [mem.copy() for i in range(6		)]
				a__     = VGroup(*lowerCamelCase		).arrange(lowerCamelCase , buff=0		)
				a__     = VGroup(*lowerCamelCase		).arrange(lowerCamelCase , buff=0		)
				a__     = VGroup(lowerCamelCase , lowerCamelCase		).arrange(lowerCamelCase , buff=0		)
				a__     = Text("CPU" , font_size=2_4		)
				a__     = Group(lowerCamelCase , lowerCamelCase		).arrange(lowerCamelCase , buff=0.5 , aligned_edge=lowerCamelCase		)
				cpu.move_to([-2.5, -0.5, 0]		)
				self.add(lowerCamelCase		)

				a__     = [mem.copy() for i in range(4		)]
				a__     = VGroup(*lowerCamelCase		).arrange(lowerCamelCase , buff=0		)
				a__     = Text("GPU" , font_size=2_4		)
				a__     = Group(lowerCamelCase , lowerCamelCase		).arrange(lowerCamelCase , buff=0.5 , aligned_edge=lowerCamelCase		)
				gpu.move_to([-1, -1, 0]		)
				self.add(lowerCamelCase		)

				a__     = [mem.copy() for i in range(6		)]
				a__     = VGroup(*lowerCamelCase		).arrange(lowerCamelCase , buff=0		)

				a__     = Text("Model" , font_size=2_4		)
				a__     = Group(lowerCamelCase , lowerCamelCase		).arrange(lowerCamelCase , buff=0.5 , aligned_edge=lowerCamelCase		)
				model.move_to([3, -1.0, 0]		)
				self.add(lowerCamelCase		)

				a__     = []
				a__     = []
				a__     = []

				for i, rect in enumerate(lowerCamelCase		):
							rect.set_stroke(lowerCamelCase		)

							a__     = Rectangle(height=0.46 / 4 , width=0.46 / 3		).set_stroke(width=0.0		).set_fill(lowerCamelCase , opacity=0.7		)

							if i == 0:
										cpu_target.next_to(cpu_left_col_base[0].get_corner(DOWN + LEFT		) , buff=0.02 , direction=lowerCamelCase		)
										cpu_target.set_x(cpu_target.get_x() + 0.1		)
							elif i == 3:
										cpu_target.next_to(model_cpu_arr[0] , direction=lowerCamelCase , buff=0.0		)
							else:
										cpu_target.next_to(model_cpu_arr[i - 1] , direction=lowerCamelCase , buff=0.0		)
							self.add(lowerCamelCase		)
							model_cpu_arr.append(lowerCamelCase		)

				self.add(*lowerCamelCase , *lowerCamelCase , *lowerCamelCase		)

				a__     = [mem.copy() for i in range(6		)]
				a__     = VGroup(*lowerCamelCase		).arrange(lowerCamelCase , buff=0		)

				a__     = Text("Loaded Checkpoint" , font_size=2_4		)
				a__     = Group(lowerCamelCase , lowerCamelCase		).arrange(lowerCamelCase , buff=0.5 , aligned_edge=lowerCamelCase		)
				checkpoint.move_to([3, 0.5, 0]		)

				self.add(lowerCamelCase		)

				a__     = []
				a__     = []

				for i, rect in enumerate(lowerCamelCase		):
							a__     = fill.copy().set_fill(lowerCamelCase , opacity=0.7		)
							target.move_to(lowerCamelCase		)
							ckpt_arr.append(lowerCamelCase		)

							a__     = target.copy()
							if i < 5:
										cpu_target.move_to(cpu_left_col_base[i + 1]		)
							else:
										cpu_target.move_to(cpu_right_col_base[i - 5]		)
							ckpt_cpu_arr.append(lowerCamelCase		)
				self.add(*lowerCamelCase , *lowerCamelCase		)

				a__     = Square(side_length=2.2		)
				key.move_to([-5, 2, 0]		)

				a__     = MarkupText(
				    F'''<b>Key:</b>\n\n<span fgcolor=\'{YELLOW}\'>●</span> Empty Model''' , font_size=1_8 , )

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

				self.add(lowerCamelCase , lowerCamelCase		)

				a__     = MarkupText(
				    F'''<span fgcolor=\'{BLUE}\'>●</span> Checkpoint''' , font_size=1_8 , )

				blue_text.next_to(lowerCamelCase , DOWN * 2.4 , aligned_edge=key_text.get_left()		)
				self.add(lowerCamelCase		)

				a__     = MarkupText(
				    F'''Based on the passed in configuration, weights are stored in\na variety of np.memmaps on disk or to a particular device.''' , font_size=2_4 , )
				step_a.move_to([2, 2, 0]		)

				a__     = [meta_mem.copy() for i in range(6		)]
				a__     = [meta_mem.copy() for i in range(6		)]
				a__     = VGroup(*lowerCamelCase		).arrange(lowerCamelCase , buff=0		)
				a__     = VGroup(*lowerCamelCase		).arrange(lowerCamelCase , buff=0		)
				a__     = VGroup(lowerCamelCase , lowerCamelCase		).arrange(lowerCamelCase , buff=0		)
				a__     = Text("Disk" , font_size=2_4		)
				a__     = Group(lowerCamelCase , lowerCamelCase		).arrange(lowerCamelCase , buff=0.5 , aligned_edge=lowerCamelCase		)
				disk.move_to([-4.0, -1.25, 0]		)
				self.play(Write(lowerCamelCase , run_time=3		) , Write(lowerCamelCase , run_time=1		) , Create(lowerCamelCase , run_time=1		)		)

				a__     = []
				for i, rect in enumerate(lowerCamelCase		):
							a__     = rect.copy()
							target.generate_target()
							target.target.move_to(disk_left_col_base[i]		).scale(0.5		)
							animations.append(MoveToTarget(lowerCamelCase , run_time=1.5		)		)
				self.play(*lowerCamelCase		)

				self.play(FadeOut(lowerCamelCase		)		)

				a__     = MarkupText(F'''Then, the checkpoint is removed from memory\nthrough garbage collection.''' , font_size=2_4		)
				step_a.move_to([2, 2, 0]		)

				self.play(Write(lowerCamelCase , run_time=3		)		)

				self.play(
				    FadeOut(lowerCamelCase , lowerCamelCase , *lowerCamelCase , *lowerCamelCase		) , )

				self.wait()



