





'''simple docstring'''




from typing import TYPE_CHECKING

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


_SCREAMING_SNAKE_CASE							     =			{
    "configuration_mvp": ["MVP_PRETRAINED_CONFIG_ARCHIVE_MAP", "MvpConfig", "MvpOnnxConfig"],
    "tokenization_mvp": ["MvpTokenizer"],
}

try:
 if not is_tokenizers_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 _SCREAMING_SNAKE_CASE							     =			["MvpTokenizerFast"]

try:
 if not is_torch_available():
  raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
 pass
else:
 _SCREAMING_SNAKE_CASE							     =			[
     "MVP_PRETRAINED_MODEL_ARCHIVE_LIST",
     "MvpForCausalLM",
     "MvpForConditionalGeneration",
     "MvpForQuestionAnswering",
     "MvpForSequenceClassification",
     "MvpModel",
     "MvpPreTrainedModel",
 ]

if TYPE_CHECKING:
 from .configuration_mvp import MVP_PRETRAINED_CONFIG_ARCHIVE_MAP, MvpConfig, MvpOnnxConfig
 from .tokenization_mvp import MvpTokenizer

 try:
  if not is_tokenizers_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .tokenization_mvp_fast import MvpTokenizerFast

 try:
  if not is_torch_available():
   raise OptionalDependencyNotAvailable()
 except OptionalDependencyNotAvailable:
  pass
 else:
  from .modeling_mvp import (
      MVP_PRETRAINED_MODEL_ARCHIVE_LIST,
      MvpForCausalLM,
      MvpForConditionalGeneration,
      MvpForQuestionAnswering,
      MvpForSequenceClassification,
      MvpModel,
      MvpPreTrainedModel,
  )

else:
 import sys

 _SCREAMING_SNAKE_CASE							     =			_LazyModule(__name__, globals()["__file__"], _import_structure, module_spec=__spec__)








'''simple docstring'''




from manim import *
class 			_lowerCAmelCase		(			A__	):






     """simple docstring"""






     def      lowerCAmelCase			(   self							:			Optional[Any]						)->	Union[str, Any]:
        snake_case 						=   Rectangle(height=0.5   ,       width=0.5						)
        snake_case 						=   Rectangle(height=0.25   ,       width=0.25						)
        snake_case 						=   Rectangle(height=0.46   ,       width=0.46						).set_stroke(width=0						)

        snake_case 						=   [mem.copy() for i in range(6						)]
        snake_case 						=   [mem.copy() for i in range(6						)]
        snake_case 						=   VGroup(*__snake_case						).arrange(__snake_case   ,       buff=0						)
        snake_case 						=   VGroup(*__snake_case						).arrange(__snake_case   ,       buff=0						)
        snake_case 						=   VGroup(__snake_case   ,       __snake_case						).arrange(__snake_case   ,       buff=0						)
        snake_case 						=   Text("""CPU"""   ,       font_size=24						)
        snake_case 						=   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 						=   [mem.copy() for i in range(4						)]
        snake_case 						=   VGroup(*__snake_case						).arrange(__snake_case   ,       buff=0						)
        snake_case 						=   Text("""GPU"""   ,       font_size=24						)
        snake_case 						=   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 						=   [mem.copy() for i in range(6						)]
        snake_case 						=   VGroup(*__snake_case						).arrange(__snake_case   ,       buff=0						)

        snake_case 						=   Text("""Model"""   ,       font_size=24						)
        snake_case 						=   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 						=   []
        snake_case 						=   []
        snake_case 						=   []

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

           snake_case 						=   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   ,       *__snake_case						)

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

        snake_case 						=   Text("""Loaded Checkpoint"""   ,       font_size=24						)
        snake_case 						=   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 						=   []
        snake_case 						=   []

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

           snake_case 						=   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 						=   Square(side_length=2.2						)
        key.move_to([-5, 2, 0]						)

        snake_case 						=   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						)

        snake_case 						=   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						)

        snake_case 						=   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=24   ,       )
        step_a.move_to([2, 2, 0]						)

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

        snake_case 						=   []
        for i, rect in enumerate(__snake_case						):
           snake_case 						=   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 						=   MarkupText(f'''Then, the checkpoint is removed from memory\nthrough garbage collection.'''   ,       font_size=24						)
        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()

