





'''simple docstring'''






from manim import *




class 			UpperCAmelCase					(      a_       ):




      def     lowercase__   (      self      :			List[Any]  )    ->				Dict:
            _lowerCAmelCase												=							Rectangle(height=0.5      ,      width=0.5  )
            _lowerCAmelCase												=							Rectangle(height=0.46      ,      width=0.46  ).set_stroke(width=0  )

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

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

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

            _lowerCAmelCase												=							Text("""Model"""      ,      font_size=24  )
            _lowerCAmelCase												=							Group(lowercase_      ,      lowercase_  ).arrange(lowercase_      ,      buff=0.5      ,      aligned_edge=lowercase_  )
            model.move_to([3, -1.0, 0]  )
            self.add(lowercase_  )

            _lowerCAmelCase												=							[]
            for i, rect in enumerate(lowercase_  ):
                  rect.set_stroke(lowercase_  )
                  # target = fill.copy().set_fill(YELLOW, opacity=0.7)
                  # target.move_to(rect)
                  # self.add(target)

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

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

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

            _lowerCAmelCase												=							Text("""Loaded Checkpoint"""      ,      font_size=24  )
            _lowerCAmelCase												=							Group(lowercase_      ,      lowercase_  ).arrange(lowercase_      ,      aligned_edge=lowercase_      ,      buff=0.4  )
            checkpoint.move_to([3, 0.5, 0]  )

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

            _lowerCAmelCase												=							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(lowercase_      ,      lowercase_  )

            _lowerCAmelCase												=							MarkupText(
                f"<span fgcolor=\'{BLUE}\'>●</span> Checkpoint"      ,      font_size=18      ,      )

            blue_text.next_to(lowercase_      ,      DOWN * 2.4      ,      aligned_edge=key_text.get_left()  )

            _lowerCAmelCase												=							MarkupText(
                f"Next, a <i><span fgcolor=\"{BLUE}\">second</span></i> model is loaded into memory,\nwith the weights of a <span fgcolor=\"{BLUE}\">single shard</span>."      ,      font_size=24      ,      )
            step_a.move_to([2, 2, 0]  )
            self.play(Write(lowercase_  )      ,      Write(lowercase_  )  )

            self.play(Write(lowercase_      ,      run_time=1  )      ,      Create(lowercase_      ,      run_time=1  )  )

            _lowerCAmelCase												=							[]
            _lowerCAmelCase												=							[]
            for i, rect in enumerate(lowercase_  ):
                  _lowerCAmelCase												=							fill.copy().set_fill(lowercase_      ,      opacity=0.7  )
                  target.move_to(lowercase_  )
                  first_animations.append(GrowFromCenter(lowercase_      ,      run_time=1  )  )

                  _lowerCAmelCase												=							target.copy()
                  cpu_target.generate_target()
                  if i < 5:
                        cpu_target.target.move_to(cpu_left_col_base[i + 1]  )
                  else:
                        cpu_target.target.move_to(cpu_right_col_base[i - 5]  )
                  second_animations.append(MoveToTarget(lowercase_      ,      run_time=1.5  )  )

            self.play(*lowercase_  )
            self.play(*lowercase_  )
            self.wait()













'''simple docstring'''






from pathlib import Path

import cva
import numpy as np
from matplotlib import pyplot as plt
def        UpperCamelCase__				(		lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase							,     lowerCAmelCase  ):





      """simple docstring"""


      _lowerCAmelCase												=							cva.getAffineTransform(lowerCAmelCase							,     lowerCAmelCase  )
      return cva.warpAffine(lowerCAmelCase							,     lowerCAmelCase							,     (rows, cols)  )


if __name__ == "__main__":
      # read original image
      A__    :       Any              =cva.imread(
          str(Path(__file__).resolve().parent.parent / '''image_data''' / '''lena.jpg''')
      )
      # turn image in gray scale value
      A__    :       Any              =cva.cvtColor(image, cva.COLOR_BGR2GRAY)
      # get image shape
      A__       ,						A__    :       Tuple              =gray_img.shape

      # set different points to rotate image
      A__    :       Optional[int]              =np.array([[50, 50], [2_00, 50], [50, 2_00]], np.floataa)
      A__    :       Tuple              =np.array([[10, 1_00], [2_00, 50], [1_00, 2_50]], np.floataa)
      A__    :       List[str]              =np.array([[50, 50], [1_50, 50], [1_20, 2_00]], np.floataa)
      A__    :       Dict              =np.array([[10, 1_00], [80, 50], [1_80, 2_50]], np.floataa)

      # add all rotated images in a list
      A__    :       List[Any]              =[
          gray_img,
          get_rotation(gray_img, ptsa, ptsa, img_rows, img_cols),
          get_rotation(gray_img, ptsa, ptsa, img_rows, img_cols),
          get_rotation(gray_img, ptsa, ptsa, img_rows, img_cols),
      ]

      # plot different image rotations
      A__    :       Tuple              =plt.figure(1)
      A__    :       int              =['''Original''', '''Rotation 1''', '''Rotation 2''', '''Rotation 3''']
      for i, image in enumerate(images):
            plt.subplot(2, 2, i + 1), plt.imshow(image, '''gray''')
            plt.title(titles[i])
            plt.axis('''off''')
            plt.subplots_adjust(left=0.0, bottom=0.05, right=1.0, top=0.95)
      plt.show()






