


from manim import *


class     __lowerCAmelCase     ( a					):






  """simple docstring"""





  def 					lowerCAmelCase__  (     self       :       Union[str, Any]  )   -> Optional[Any]:




     """simple docstring"""
     snake_case_					    =					Rectangle(height=0.5    ,				width=0.5  )
     snake_case_					    =					Rectangle(height=0.46    ,				width=0.46  ).set_stroke(width=0  )
     snake_case_					    =					Rectangle(height=0.25    ,				width=0.25  )

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

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

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

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

     snake_case_					    =					[]
     snake_case_					    =					[]

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

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

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

     self.add(*_lowerCAmelCase    ,				*_lowerCAmelCase  )

     snake_case_					    =					[meta_mem.copy() for i in range(6  )]
     snake_case_					    =					[meta_mem.copy() for i in range(6  )]
     snake_case_					    =					VGroup(*_lowerCAmelCase  ).arrange(_lowerCAmelCase    ,				buff=0  )
     snake_case_					    =					VGroup(*_lowerCAmelCase  ).arrange(_lowerCAmelCase    ,				buff=0  )
     snake_case_					    =					VGroup(_lowerCAmelCase    ,				_lowerCAmelCase  ).arrange(_lowerCAmelCase    ,				buff=0  )
     snake_case_					    =					Text("Disk"    ,				font_size=2_4  )
     snake_case_					    =					Group(_lowerCAmelCase    ,				_lowerCAmelCase  ).arrange(_lowerCAmelCase    ,				buff=0.5    ,				aligned_edge=_lowerCAmelCase  )
     disk.move_to([-4.0, -1.25, 0]  )
     self.add(_lowerCAmelCase    ,				_lowerCAmelCase  )

     snake_case_					    =					[]

     for i in range(6  ):
        snake_case_					    =					fill.copy().set_fill(_lowerCAmelCase    ,				opacity=0.8  )
        target.move_to(disk_left_col_base[i]  ).scale(0.5  )
        cpu_disk_arr.append(_lowerCAmelCase  )

     self.add(*_lowerCAmelCase  )

     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=1_8    ,				)

     key_text.move_to([-5, 2.4, 0]  )

     self.add(_lowerCAmelCase    ,				_lowerCAmelCase  )

     snake_case_					    =					MarkupText(
         F'''<span fgcolor=\'{BLUE}\'>●</span> Checkpoint'''    ,				font_size=1_8    ,				)

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

     snake_case_					    =					MarkupText(F'''The offloaded weights are all sent to the CPU.'''    ,				font_size=2_4  )
     step_a.move_to([2, 2, 0]  )

     self.play(Write(_lowerCAmelCase    ,				run_time=3  )  )

     for i in range(6  ):
        snake_case_					    =					cpu_disk_arr[i]
        snake_case_					    =					rect.copy().set_fill(_lowerCAmelCase    ,				opacity=0.8  ).scale(2.0  )
        cpa.generate_target()
        cpa.target.move_to(model_base[i]  )

        if i == 0:
           rect.set_fill(_lowerCAmelCase    ,				opacity=0.8  )
           rect.generate_target()
           rect.target.move_to(cpu_left_col_base[0]  ).scale(2.0  )

           self.remove(
               *_lowerCAmelCase    ,				*_lowerCAmelCase    ,				)

        else:
           rect.generate_target()
           rect.target.move_to(cpu_left_col_base[i]  ).scale(2.0  )
        self.play(MoveToTarget(_lowerCAmelCase  )    ,				MoveToTarget(_lowerCAmelCase  )    ,				model_base[i].animate.set_stroke(_lowerCAmelCase  )  )
     self.play(FadeOut(_lowerCAmelCase  )  )

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

     self.play(Write(_lowerCAmelCase    ,				run_time=3  )  )

     snake_case_					    =					[]
     snake_case_					    =					[]
     for i in range(6  ):
        snake_case_					    =					Arrow(start=_lowerCAmelCase    ,				end=_lowerCAmelCase    ,				color=_lowerCAmelCase    ,				buff=0.5  )
        a.next_to(model_base[i].get_left()    ,				_lowerCAmelCase    ,				buff=0.2  )
        arrows.append(_lowerCAmelCase  )
        animations.append(Write(_lowerCAmelCase  )  )
     self.play(*_lowerCAmelCase  )
     self.wait()








from typing import TYPE_CHECKING

from ...utils import (
    OptionalDependencyNotAvailable,
    _LazyModule,
    is_sentencepiece_available,
    is_speech_available,
    is_torch_available,
)


SCREAMING_SNAKE_CASE	:List[Any]  		=     {
    '''configuration_speech_to_text_2''': ['''SPEECH_TO_TEXT_2_PRETRAINED_CONFIG_ARCHIVE_MAP''', '''Speech2Text2Config'''],
    '''processing_speech_to_text_2''': ['''Speech2Text2Processor'''],
    '''tokenization_speech_to_text_2''': ['''Speech2Text2Tokenizer'''],
}


try:
   if not is_torch_available():
      raise OptionalDependencyNotAvailable()
except OptionalDependencyNotAvailable:
   pass
else:
   SCREAMING_SNAKE_CASE	:int  		=     [
       '''SPEECH_TO_TEXT_2_PRETRAINED_MODEL_ARCHIVE_LIST''',
       '''Speech2Text2ForCausalLM''',
       '''Speech2Text2PreTrainedModel''',
   ]


if TYPE_CHECKING:
   from .configuration_speech_to_text_a import SPEECH_TO_TEXT_2_PRETRAINED_CONFIG_ARCHIVE_MAP, SpeechaTextaConfig
   from .processing_speech_to_text_a import SpeechaTextaProcessor
   from .tokenization_speech_to_text_a import SpeechaTextaTokenizer

   try:
      if not is_torch_available():
         raise OptionalDependencyNotAvailable()
   except OptionalDependencyNotAvailable:
      pass
   else:
      from .modeling_speech_to_text_a import (
          SPEECH_TO_TEXT_2_PRETRAINED_MODEL_ARCHIVE_LIST,
          SpeechaTextaForCausalLM,
          SpeechaTextaPreTrainedModel,
      )

else:
   import sys

   SCREAMING_SNAKE_CASE	:str  		=     _LazyModule(__name__, globals()['''__file__'''], _import_structure, module_spec=__spec__)




