

'''simple docstring'''







from manim import *


class 					A__      (      UpperCAmelCase_			):



    def 					snake_case_			(					self       )						->      str:





           '''simple docstring'''
           A_						=      Rectangle(height=0.5		,				width=0.5       )
           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(*_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(1       )]
           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.align_to(_snake_case		,				_snake_case       )
           gpu.set_x(gpu.get_x() - 1       )

           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.play(
               Create(_snake_case		,				run_time=1       )		,				Create(_snake_case		,				run_time=1       )		,				Create(_snake_case		,				run_time=1       )		,				)

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

           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]       )

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

           self.add(_snake_case       )

           A_						=      []
           A_						=      []
           A_						=      []
           for i, rect in enumerate(_snake_case       ):
                  A_						=      Rectangle(height=0.46		,				width=0.46       ).set_stroke(width=0.0       ).set_fill(_snake_case		,				opacity=0.7       )
                  cpu_target.move_to(_snake_case       )
                  cpu_target.generate_target()
                  A_						=      0.46 / 4
                  A_						=      0.46 / 3

                  if i == 0:
                         cpu_target.target.next_to(cpu_left_col_base[0].get_corner(DOWN + LEFT       )		,				buff=0.02		,				direction=_snake_case       )
                         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=_snake_case		,				buff=0.0       )
                  else:
                         cpu_target.target.next_to(cpu_targs[i - 1].target		,				direction=_snake_case		,				buff=0.0       )
                  cpu_targs.append(_snake_case       )

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

           self.play(*_snake_case       )
           self.play(*_snake_case       )

           self.wait()



'''simple docstring'''







def       UpperCAmelCase__    (      UpperCAmelCase__				)			->			int:
       assert (
           isinstance(UpperCAmelCase__,       UpperCAmelCase__				) and number_of_steps > 0
       ), F'''number_of_steps needs to be positive integer, your input {number_of_steps}'''
       if number_of_steps == 1:
              return 1
       A_					,			A_						=      1, 1
       for _ in range(number_of_steps - 1				):
              A_					,			A_						=      current + previous, current
       return current


if __name__ == "__main__":
      import doctest

      doctest.testmod()
