code: 
  
  
  """simple docstring"""
  
  
  
  from collections import namedtuple
  
  SCREAMING_SNAKE_CASE       = namedtuple("from_to", "from_ to")
  
  SCREAMING_SNAKE_CASE       = {
      "millimeter": "mm",
      "centimeter": "cm",
      "meter": "m",
      "kilometer": "km",
      "inch": "in",
      "inche": "in",  # Trailing 's' has been stripped off
      "feet": "ft",
      "foot": "ft",
      "yard": "yd",
      "mile": "mi",
  }
  
  SCREAMING_SNAKE_CASE       = {
      "mm": from_to(0.001, 1000),
      "cm": from_to(0.01, 100),
      "m": from_to(1, 1),
      "km": from_to(1000, 0.001),
      "in": from_to(0.0254, 39.3701),
      "ft": from_to(0.3048, 3.28084),
      "yd": from_to(0.9144, 1.09361),
      "mi": from_to(1609.34, 0.000621371),
  }
  
  
  
  
  
  
  
  def 						_SCREAMING_SNAKE_CASE     (							lowercase_    ,				lowercase_    ,				lowercase_		)		->	float:
   A__ =       from_type.lower().rstrip("s"		)
   A__ =       TYPE_CONVERSION.get(lowercase_    ,				lowercase_		)
   A__ =       to_type.lower().rstrip("s"		)
   A__ =       TYPE_CONVERSION.get(lowercase_    ,				lowercase_		)
   if new_from not in METRIC_CONVERSION:
    A__ =       (
        f"""Invalid 'from_type' value: {from_type!r}.\n"""
        f"""Conversion abbreviations are: {", ".join(lowercase_		)}"""
    )
    raise ValueError(lowercase_		)
   if new_to not in METRIC_CONVERSION:
    A__ =       (
        f"""Invalid 'to_type' value: {to_type!r}.\n"""
        f"""Conversion abbreviations are: {", ".join(lowercase_		)}"""
    )
    raise ValueError(lowercase_		)
   return value * METRIC_CONVERSION[new_from].from_ * METRIC_CONVERSION[new_to].to
  
  
  if __name__ == "__main__":
        import doctest
  
        doctest.testmod()
  
  
  
  
  
  
style_context: 
  
  
  
  
  """simple docstring"""
  
  
  
  from manim import *
  
  
  
  
  class 			UpperCAmelCase_						(		A_							):
  
  
  
  
      def 							__magic_name__							(					self		: Any   )   ->							Optional[int]:
  
  
  
  
       '''simple docstring'''
  
       A__ =       Rectangle(height=0.5			,				width=0.5   )
       A__ =       Rectangle(height=0.46			,				width=0.46   ).set_stroke(width=0   )
       A__ =       Rectangle(height=0.25			,				width=0.25   )
  
       A__ =       [mem.copy() for i in range(6   )]
       A__ =       [mem.copy() for i in range(6   )]
       A__ =       VGroup(*snake_case_   ).arrange(snake_case_			,				buff=0   )
       A__ =       VGroup(*snake_case_   ).arrange(snake_case_			,				buff=0   )
       A__ =       VGroup(snake_case_			,				snake_case_   ).arrange(snake_case_			,				buff=0   )
       A__ =       Text("CPU"			,				font_size=24   )
       A__ =       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_   )
  
       A__ =       [mem.copy() for i in range(4   )]
       A__ =       VGroup(*snake_case_   ).arrange(snake_case_			,				buff=0   )
       A__ =       Text("GPU"			,				font_size=24   )
       A__ =       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_   )
  
       A__ =       [mem.copy() for i in range(6   )]
       A__ =       VGroup(*snake_case_   ).arrange(snake_case_			,				buff=0   )
  
       A__ =       Text("Model"			,				font_size=24   )
       A__ =       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_   )
  
       A__ =       []
       A__ =       []
  
       for i, rect in enumerate(snake_case_   ):
        rect.set_stroke(snake_case_   )
  
        A__ =       Rectangle(height=0.46 / 4			,				width=0.46 / 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.02			,				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_   )
  
       A__ =       [meta_mem.copy() for i in range(6   )]
       A__ =       [meta_mem.copy() for i in range(6   )]
       A__ =       VGroup(*snake_case_   ).arrange(snake_case_			,				buff=0   )
       A__ =       VGroup(*snake_case_   ).arrange(snake_case_			,				buff=0   )
       A__ =       VGroup(snake_case_			,				snake_case_   ).arrange(snake_case_			,				buff=0   )
       A__ =       Text("Disk"			,				font_size=24   )
       A__ =       Group(snake_case_			,				snake_case_   ).arrange(snake_case_			,				buff=0.5			,				aligned_edge=snake_case_   )
       disk.move_to([-4.0, -1.25, 0]   )
       self.add(snake_case_			,				snake_case_   )
  
       A__ =       []
  
       for i in range(6   ):
        A__ =       fill.copy().set_fill(snake_case_			,				opacity=0.8   )
        target.move_to(disk_left_col_base[i]   ).scale(0.5   )
        cpu_disk_arr.append(snake_case_   )
  
       self.add(*snake_case_   )
  
       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=18			,				)
  
       key_text.move_to([-5, 2.4, 0]   )
  
       self.add(snake_case_			,				snake_case_   )
  
       A__ =       MarkupText(
           F"""<span fgcolor='{BLUE}'>●</span> Checkpoint"""			,				font_size=18			,				)
  
       blue_text.next_to(snake_case_			,				DOWN * 2.4			,				aligned_edge=key_text.get_left()   )
       self.add(snake_case_   )
  
       A__ =       MarkupText(F"""The offloaded weights are all sent to the CPU."""			,				font_size=24   )
       step_a.move_to([2, 2, 0]   )
  
       self.play(Write(snake_case_			,				run_time=3   )   )
  
       for i in range(6   ):
        A__ =       cpu_disk_arr[i]
        A__ =       rect.copy().set_fill(snake_case_			,				opacity=0.8   ).scale(2.0   )
        cpa.generate_target()
        cpa.target.move_to(model_base[i]   )
  
        if i == 0:
         rect.set_fill(snake_case_			,				opacity=0.8   )
         rect.generate_target()
         rect.target.move_to(cpu_left_col_base[0]   ).scale(2.0   )
  
         self.remove(
             *snake_case_			,				*snake_case_			,				)
  
        else:
         rect.generate_target()
         rect.target.move_to(cpu_left_col_base[i]   ).scale(2.0   )
        self.play(MoveToTarget(snake_case_   )			,				MoveToTarget(snake_case_   )			,				model_base[i].animate.set_stroke(snake_case_   )   )
       self.play(FadeOut(snake_case_   )   )
  
       A__ =       MarkupText(
           F"""Finally, hooks are added to each weight in the model\nto transfer the weights from CPU to GPU\n\t\tand back when needed."""			,				font_size=24			,				)
       step_a.move_to([2, 2, 0]   )
  
       self.play(Write(snake_case_			,				run_time=3   )   )
  
       A__ =       []
       A__ =       []
       for i in range(6   ):
        A__ =       Arrow(start=snake_case_			,				end=snake_case_			,				color=snake_case_			,				buff=0.5   )
        a.next_to(model_base[i].get_left()			,				snake_case_			,				buff=0.2   )
        arrows.append(snake_case_   )
        animations.append(Write(snake_case_   )   )
       self.play(*snake_case_   )
       self.wait()
  
  
  
  
  
  