

'''simple docstring'''


from manim import *




class     a			(				SCREAMING_SNAKE_CASE       ):






						"""simple docstring"""




						def       __magic_name__							(							self					:      List[str]  ):



								'''simple docstring'''



								snake_case__						:       List[Any]       						=  Rectangle(height=0.5			,			width=0.5  )
								snake_case__						:       int       						=  Rectangle(height=0.2_5			,			width=0.2_5  )
								snake_case__						:       int       						=  Rectangle(height=0.4_6			,			width=0.4_6  ).set_stroke(width=0  )

								snake_case__						:       List[str]       						=  [mem.copy() for i in range(6  )]
								snake_case__						:       List[Any]       						=  [mem.copy() for i in range(6  )]
								snake_case__						:       Optional[int]       						=  VGroup(*snake_case_  ).arrange(snake_case_			,			buff=0  )
								snake_case__						:       Union[str, Any]       						=  VGroup(*snake_case_  ).arrange(snake_case_			,			buff=0  )
								snake_case__						:       Optional[Any]       						=  VGroup(snake_case_			,			snake_case_  ).arrange(snake_case_			,			buff=0  )
								snake_case__						:       Optional[Any]       						=  Text('''CPU'''			,			font_size=2_4  )
								snake_case__						:       int       						=  Group(snake_case_			,			snake_case_  ).arrange(snake_case_			,			buff=0.5			,			aligned_edge=snake_case_  )
								cpu.move_to([-2.5, -0.5, 0]  )
								self.add(snake_case_  )

								snake_case__						:       Any       						=  [mem.copy() for i in range(4  )]
								snake_case__						:       int       						=  VGroup(*snake_case_  ).arrange(snake_case_			,			buff=0  )
								snake_case__						:       Any       						=  Text('''GPU'''			,			font_size=2_4  )
								snake_case__						:       Optional[Any]       						=  Group(snake_case_			,			snake_case_  ).arrange(snake_case_			,			buff=0.5			,			aligned_edge=snake_case_  )
								gpu.move_to([-1, -1, 0]  )
								self.add(snake_case_  )

								snake_case__						:       Optional[int]       						=  [mem.copy() for i in range(6  )]
								snake_case__						:       List[Any]       						=  VGroup(*snake_case_  ).arrange(snake_case_			,			buff=0  )

								snake_case__						:       int       						=  Text('''Model'''			,			font_size=2_4  )
								snake_case__						:       Optional[int]       						=  Group(snake_case_			,			snake_case_  ).arrange(snake_case_			,			buff=0.5			,			aligned_edge=snake_case_  )
								model.move_to([3, -1.0, 0]  )
								self.add(snake_case_  )

								snake_case__						:       List[Any]       						=  []
								snake_case__						:       Any       						=  []
								snake_case__						:       str       						=  []

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

										snake_case__						:       Union[str, Any]       						=  Rectangle(height=0.4_6 / 4			,			width=0.4_6 / 3  ).set_stroke(width=0.0  ).set_fill(snake_case_			,			opacity=0.7  )

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

								self.add(*snake_case_			,			*snake_case_			,			*snake_case_  )

								snake_case__						:       Optional[Any]       						=  [mem.copy() for i in range(6  )]
								snake_case__						:       Tuple       						=  VGroup(*snake_case_  ).arrange(snake_case_			,			buff=0  )

								snake_case__						:       List[Any]       						=  Text('''Loaded Checkpoint'''			,			font_size=2_4  )
								snake_case__						:       Optional[Any]       						=  Group(snake_case_			,			snake_case_  ).arrange(snake_case_			,			buff=0.5			,			aligned_edge=snake_case_  )
								checkpoint.move_to([3, 0.5, 0]  )

								self.add(snake_case_  )

								snake_case__						:       Optional[int]       						=  []
								snake_case__						:       int       						=  []

								for i, rect in enumerate(snake_case_  ):
										snake_case__						:       Union[str, Any]       						=  fill.copy().set_fill(snake_case_			,			opacity=0.7  )
										target.move_to(snake_case_  )
										ckpt_arr.append(snake_case_  )

										snake_case__						:       Tuple       						=  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(snake_case_  )
								self.add(*snake_case_			,			*snake_case_  )

								snake_case__						:       Optional[Any]       						=  Square(side_length=2.2  )
								key.move_to([-5, 2, 0]  )

								snake_case__						:       Any       						=  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(snake_case_			,			snake_case_  )

								snake_case__						:       List[Any]       						=  MarkupText(
								    F"""<span fgcolor='{BLUE}'>●</span> Checkpoint"""			,			font_size=1_8			,			)

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

								snake_case__						:       int       						=  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]  )

								snake_case__						:       str       						=  [meta_mem.copy() for i in range(6  )]
								snake_case__						:       List[str]       						=  [meta_mem.copy() for i in range(6  )]
								snake_case__						:       Any       						=  VGroup(*snake_case_  ).arrange(snake_case_			,			buff=0  )
								snake_case__						:       Dict       						=  VGroup(*snake_case_  ).arrange(snake_case_			,			buff=0  )
								snake_case__						:       Tuple       						=  VGroup(snake_case_			,			snake_case_  ).arrange(snake_case_			,			buff=0  )
								snake_case__						:       Optional[int]       						=  Text('''Disk'''			,			font_size=2_4  )
								snake_case__						:       str       						=  Group(snake_case_			,			snake_case_  ).arrange(snake_case_			,			buff=0.5			,			aligned_edge=snake_case_  )
								disk.move_to([-4.0, -1.2_5, 0]  )
								self.play(Write(snake_case_			,			run_time=3  )			,			Write(snake_case_			,			run_time=1  )			,			Create(snake_case_			,			run_time=1  )  )

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

								self.play(FadeOut(snake_case_  )  )

								snake_case__						:       Union[str, Any]       						=  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(snake_case_			,			run_time=3  )  )

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

								self.wait()






'''simple docstring'''


from __future__ import annotations

from typing import Any




class     a			:






						"""simple docstring"""




						def __init__(							self					:      Tuple			,			snake_case_					:      int			,			snake_case_					:      int			,			snake_case_					:      float = 0  ):



								'''simple docstring'''



								snake_case__						,       snake_case__						:       Optional[Any]       						=  row, column
								snake_case__						:       Dict       						=  [[default_value for c in range(snake_case_  )] for r in range(snake_case_  )]







						def __str__(							self					:      Optional[Any]  ):



								'''simple docstring'''



								snake_case__						:       Optional[int]       						=  F"""Matrix consist of {self.row} rows and {self.column} columns\n"""

								# Make string identifier
								snake_case__						:       List[str]       						=  0
								for row_vector in self.array:
										for obj in row_vector:
												snake_case__						:       str       						=  max(snake_case_			,			len(str(snake_case_  )  )  )
								snake_case__						:       Dict       						=  F"""%{max_element_length}s"""

								# Make string and return
								def single_line(snake_case_					:      list[float]  ) -> str:
										nonlocal string_format_identifier
										snake_case__						:       str       						=  '''['''
										line += ", ".join(string_format_identifier % (obj,) for obj in row_vector  )
										line += "]"
										return line

								s += "\n".join(single_line(snake_case_  ) for row_vector in self.array  )
								return s







						def __repr__(							self					:      Optional[int]  ):



								'''simple docstring'''



								return str(self  )







						def       __magic_name__							(							self					:      Optional[int]			,			snake_case_					:      tuple[int, int]  ):



								'''simple docstring'''



								if not (isinstance(snake_case_			,			(list, tuple)  ) and len(snake_case_  ) == 2):
										return False
								elif not (0 <= loc[0] < self.row and 0 <= loc[1] < self.column):
										return False
								else:
										return True







						def __getitem__(							self					:      List[str]			,			snake_case_					:      tuple[int, int]  ):



								'''simple docstring'''



								assert self.validate_indicies(snake_case_  )
								return self.array[loc[0]][loc[1]]







						def __setitem__(							self					:      int			,			snake_case_					:      tuple[int, int]			,			snake_case_					:      float  ):



								'''simple docstring'''



								assert self.validate_indicies(snake_case_  )
								snake_case__						:       Optional[Any]       						=  value







						def __add__(							self					:      Dict			,			snake_case_					:      Matrix  ):



								'''simple docstring'''



								assert isinstance(snake_case_			,			snake_case_  )
								assert self.row == another.row and self.column == another.column

								# Add
								snake_case__						:       str       						=  Matrix(self.row			,			self.column  )
								for r in range(self.row  ):
										for c in range(self.column  ):
												snake_case__						:       Optional[Any]       						=  self[r, c] + another[r, c]
								return result







						def __neg__(							self					:      Optional[Any]  ):



								'''simple docstring'''



								snake_case__						:       int       						=  Matrix(self.row			,			self.column  )
								for r in range(self.row  ):
										for c in range(self.column  ):
												snake_case__						:       str       						=  -self[r, c]
								return result







						def __sub__(							self					:      Optional[int]			,			snake_case_					:      Matrix  ):



								'''simple docstring'''



								return self + (-another)







						def __mul__(							self					:      int			,			snake_case_					:      int | float | Matrix  ):



								'''simple docstring'''



								if isinstance(snake_case_			,			(int, float)  ):  # Scalar multiplication
										snake_case__						:       Dict       						=  Matrix(self.row			,			self.column  )
										for r in range(self.row  ):
												for c in range(self.column  ):
														snake_case__						:       Tuple       						=  self[r, c] * another
										return result
								elif isinstance(snake_case_			,			snake_case_  ):  # Matrix multiplication
										assert self.column == another.row
										snake_case__						:       List[Any]       						=  Matrix(self.row			,			another.column  )
										for r in range(self.row  ):
												for c in range(another.column  ):
														for i in range(self.column  ):
																result[r, c] += self[r, i] * another[i, c]
										return result
								else:
										snake_case__						:       Union[str, Any]       						=  F"""Unsupported type given for another ({type(snake_case_  )})"""
										raise TypeError(snake_case_  )







						def       __magic_name__							(							self					:      List[str]  ):



								'''simple docstring'''



								snake_case__						:       Optional[int]       						=  Matrix(self.column			,			self.row  )
								for r in range(self.row  ):
										for c in range(self.column  ):
												snake_case__						:       List[Any]       						=  self[r, c]
								return result







						def       __magic_name__							(							self					:      Tuple			,			snake_case_					:      Matrix			,			snake_case_					:      Matrix  ):



								'''simple docstring'''



								assert isinstance(snake_case_			,			snake_case_  ) and isinstance(snake_case_			,			snake_case_  )
								assert self.row == self.column == u.row == v.row  # u, v should be column vector
								assert u.column == v.column == 1  # u, v should be column vector

								# Calculate
								snake_case__						:       Tuple       						=  v.transpose()
								snake_case__						:       Optional[Any]       						=  (v_t * self * u)[0, 0] + 1
								if numerator_factor == 0:
										return None  # It's not invertable
								return self - ((self * u) * (v_t * self) * (1.0 / numerator_factor))


# Testing
if __name__ == "__main__":




					def 	_a       (				):

							"""simple docstring"""

							snake_case__						:       Tuple       						=  Matrix(3   ,							3   ,							0     )
							for i in range(3     ):
									snake_case__						:       Any       						=  1
							print(F"""a^(-1) is {ainv}"""     )
							# u, v
							snake_case__						:       int       						=  Matrix(3   ,							1   ,							0     )
							snake_case__						,       snake_case__						,       snake_case__						:       List[Any]       						=  1, 2, -3
							snake_case__						:       Any       						=  Matrix(3   ,							1   ,							0     )
							snake_case__						,       snake_case__						,       snake_case__						:       Optional[int]       						=  4, -2, 5
							print(F"""u is {u}"""     )
							print(F"""v is {v}"""     )
							print(F"""uv^T is {u * v.transpose()}"""     )
							# Sherman Morrison
							print(F"""(a + uv^T)^(-1) is {ainv.sherman_morrison(__lowerCAmelCase   ,							__lowerCAmelCase     )}"""     )




					def 	_a       (				):

							"""simple docstring"""

							import doctest

							doctest.testmod()





					testa()



