






from manim import *



class 				_A			(     UpperCamelCase				):
    """simple docstring"""

    def _a							(				self      :     int      )      ->							Dict:
           __UpperCAmelCase     				=Rectangle(height=0.5 ,     width=0.5      )
           __UpperCAmelCase     				=Rectangle(height=0.46 ,     width=0.46      ).set_stroke(width=0      )

           __UpperCAmelCase     				=Rectangle(height=0.25 ,     width=0.25      )

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

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

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

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

           __UpperCAmelCase     				=[]
           __UpperCAmelCase     				=[]

           for i, rect in enumerate(__SCREAMING_SNAKE_CASE      ):
                  __UpperCAmelCase     				=fill.copy().set_fill(__SCREAMING_SNAKE_CASE ,     opacity=0.8      )
                  target.move_to(__SCREAMING_SNAKE_CASE      )
                  model_arr.append(__SCREAMING_SNAKE_CASE      )

                  __UpperCAmelCase     				=Rectangle(height=0.46 ,     width=0.46      ).set_stroke(width=0.0      ).set_fill(__SCREAMING_SNAKE_CASE ,     opacity=0.8      )
                  cpu_target.move_to(cpu_left_col_base[i]      )
                  model_cpu_arr.append(__SCREAMING_SNAKE_CASE      )

           self.add(*__SCREAMING_SNAKE_CASE ,     *__SCREAMING_SNAKE_CASE      )

           __UpperCAmelCase     				=[meta_mem.copy() for i in range(6      )]
           __UpperCAmelCase     				=[meta_mem.copy() for i in range(6      )]
           __UpperCAmelCase     				=VGroup(*__SCREAMING_SNAKE_CASE      ).arrange(__SCREAMING_SNAKE_CASE ,     buff=0      )
           __UpperCAmelCase     				=VGroup(*__SCREAMING_SNAKE_CASE      ).arrange(__SCREAMING_SNAKE_CASE ,     buff=0      )
           __UpperCAmelCase     				=VGroup(__SCREAMING_SNAKE_CASE ,     __SCREAMING_SNAKE_CASE      ).arrange(__SCREAMING_SNAKE_CASE ,     buff=0      )
           __UpperCAmelCase     				=Text("""Disk""" ,     font_size=24      )
           __UpperCAmelCase     				=Group(__SCREAMING_SNAKE_CASE ,     __SCREAMING_SNAKE_CASE      ).arrange(__SCREAMING_SNAKE_CASE ,     buff=0.5 ,     aligned_edge=__SCREAMING_SNAKE_CASE      )
           disk.move_to([-4, -1.25, 0]      )
           self.add(__SCREAMING_SNAKE_CASE ,     __SCREAMING_SNAKE_CASE      )

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

           __UpperCAmelCase     				=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(__SCREAMING_SNAKE_CASE ,     __SCREAMING_SNAKE_CASE      )

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

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

           __UpperCAmelCase     				=MarkupText(
               f'''Now watch as an input is passed through the model\nand how the memory is utilized and handled.''' ,     font_size=24 ,     )
           step_a.move_to([2, 2, 0]      )

           self.play(Write(__SCREAMING_SNAKE_CASE      )      )

           __UpperCAmelCase     				=Square(0.3      )
           input.set_fill(__SCREAMING_SNAKE_CASE ,     opacity=1.0      )
           input.set_stroke(width=0.0      )
           input.next_to(model_base[0] ,     __SCREAMING_SNAKE_CASE ,     buff=0.5      )

           self.play(Write(__SCREAMING_SNAKE_CASE      )      )

           input.generate_target()
           input.target.next_to(model_arr[0] ,     direction=__SCREAMING_SNAKE_CASE ,     buff=0.02      )
           self.play(MoveToTarget(__SCREAMING_SNAKE_CASE      )      )

           self.play(FadeOut(__SCREAMING_SNAKE_CASE      )      )

           __UpperCAmelCase     				=Arrow(start=__SCREAMING_SNAKE_CASE ,     end=__SCREAMING_SNAKE_CASE ,     color=__SCREAMING_SNAKE_CASE ,     buff=0.5      )
           a.next_to(model_arr[0].get_left() ,     __SCREAMING_SNAKE_CASE ,     buff=0.2      )

           model_cpu_arr[0].generate_target()
           model_cpu_arr[0].target.move_to(gpu_rect[0]      )

           __UpperCAmelCase     				=MarkupText(
               f'''As the input reaches a layer, the hook triggers\nand weights are moved from the CPU\nto the GPU and back.''' ,     font_size=24 ,     )
           step_a.move_to([2, 2, 0]      )

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

           __UpperCAmelCase     				={"""run_time""": 1, """fade_in""": True, """fade_out""": True, """buff""": 0.02}

           self.play(
               Write(__SCREAMING_SNAKE_CASE      ) ,     Circumscribe(model_arr[0] ,     color=__SCREAMING_SNAKE_CASE ,     **__SCREAMING_SNAKE_CASE      ) ,     Circumscribe(model_cpu_arr[0] ,     color=__SCREAMING_SNAKE_CASE ,     **__SCREAMING_SNAKE_CASE      ) ,     Circumscribe(gpu_rect[0] ,     color=__SCREAMING_SNAKE_CASE ,     **__SCREAMING_SNAKE_CASE      ) ,     )
           self.play(MoveToTarget(model_cpu_arr[0]      )      )

           __UpperCAmelCase     				=a.copy()
           for i in range(6      ):
                  a_c.next_to(model_arr[i].get_right() + 0.02 ,     __SCREAMING_SNAKE_CASE ,     buff=0.2      )

                  input.generate_target()
                  input.target.move_to(model_arr[i].get_right() + 0.02      )

                  __UpperCAmelCase     				=AnimationGroup(
                      FadeOut(__SCREAMING_SNAKE_CASE ,     run_time=0.5      ) ,     MoveToTarget(__SCREAMING_SNAKE_CASE ,     run_time=0.5      ) ,     FadeIn(__SCREAMING_SNAKE_CASE ,     run_time=0.5      ) ,     lag_ratio=0.2      )

                  self.play(__SCREAMING_SNAKE_CASE      )

                  model_cpu_arr[i].generate_target()
                  model_cpu_arr[i].target.move_to(cpu_left_col_base[i]      )

                  if i < 5:
                         model_cpu_arr[i + 1].generate_target()
                         model_cpu_arr[i + 1].target.move_to(gpu_rect[0]      )
                         if i >= 1:
                                __UpperCAmelCase     				=0.7

                         self.play(
                             Circumscribe(model_arr[i] ,     **__SCREAMING_SNAKE_CASE      ) ,     Circumscribe(cpu_left_col_base[i] ,     **__SCREAMING_SNAKE_CASE      ) ,     Circumscribe(cpu_left_col_base[i + 1] ,     color=__SCREAMING_SNAKE_CASE ,     **__SCREAMING_SNAKE_CASE      ) ,     Circumscribe(gpu_rect[0] ,     color=__SCREAMING_SNAKE_CASE ,     **__SCREAMING_SNAKE_CASE      ) ,     Circumscribe(model_arr[i + 1] ,     color=__SCREAMING_SNAKE_CASE ,     **__SCREAMING_SNAKE_CASE      ) ,     )
                         if i < 1:
                                self.play(
                                    MoveToTarget(model_cpu_arr[i]      ) ,     MoveToTarget(model_cpu_arr[i + 1]      ) ,     )
                         else:
                                self.play(
                                    MoveToTarget(model_cpu_arr[i] ,     run_time=0.7      ) ,     MoveToTarget(model_cpu_arr[i + 1] ,     run_time=0.7      ) ,     )
                  else:
                         model_cpu_arr[i].generate_target()
                         model_cpu_arr[i].target.move_to(cpu_left_col_base[-1]      )
                         input.generate_target()
                         input.target.next_to(model_arr[-1].get_right() ,     RIGHT + 0.02 ,     buff=0.2      )

                         self.play(
                             Circumscribe(model_arr[-1] ,     color=__SCREAMING_SNAKE_CASE ,     **__SCREAMING_SNAKE_CASE      ) ,     Circumscribe(cpu_left_col_base[-1] ,     color=__SCREAMING_SNAKE_CASE ,     **__SCREAMING_SNAKE_CASE      ) ,     Circumscribe(gpu_rect[0] ,     color=__SCREAMING_SNAKE_CASE ,     **__SCREAMING_SNAKE_CASE      ) ,     )

                         self.play(MoveToTarget(model_cpu_arr[i]      )      )

                  __UpperCAmelCase     				=a_c
                  __UpperCAmelCase     				=a_c.copy()

           input.generate_target()
           input.target.next_to(model_base[-1] ,     RIGHT + 0.02 ,     buff=0.5      )
           self.play(
               FadeOut(__SCREAMING_SNAKE_CASE      ) ,     FadeOut(__SCREAMING_SNAKE_CASE ,     run_time=0.5      ) ,     )

           __UpperCAmelCase     				=MarkupText(f'''Inference on a model too large for GPU memory\nis successfully completed.''' ,     font_size=24      )
           step_a.move_to([2, 2, 0]      )

           self.play(Write(__SCREAMING_SNAKE_CASE ,     run_time=3      ) ,     MoveToTarget(__SCREAMING_SNAKE_CASE      )      )

           self.wait()











import json
import os
import unittest

from transformers.models.biogpt.tokenization_biogpt import VOCAB_FILES_NAMES, BioGptTokenizer
from transformers.testing_utils import slow

from ...test_tokenization_common import TokenizerTesterMixin



class 					__snake_case	(  __SCREAMING_SNAKE_CASE			,     unittest.TestCase    ):


    '''simple docstring'''







    lowerCamelCase__    :		Dict				=	BioGptTokenizer
    lowerCamelCase__    :		List[Any]				=	False



    def  lowercase_					(       self     ):





        '''simple docstring'''

        super().setUp()

        # Adapted from Sennrich et al. 2015 and https://github.com/rsennrich/subword-nmt
        SCREAMING_SNAKE_CASE__											=			[
            '''l''',
            '''o''',
            '''w''',
            '''e''',
            '''r''',
            '''s''',
            '''t''',
            '''i''',
            '''d''',
            '''n''',
            '''w</w>''',
            '''r</w>''',
            '''t</w>''',
            '''lo''',
            '''low''',
            '''er</w>''',
            '''low</w>''',
            '''lowest</w>''',
            '''newer</w>''',
            '''wider</w>''',
            '''<unk>''',
        ]
        SCREAMING_SNAKE_CASE__											=			dict(zip(A_   ,				range(len(A_     )     )     )     )
        SCREAMING_SNAKE_CASE__											=			['''l o 123''', '''lo w 1456''', '''e r</w> 1789''', '''''']

        SCREAMING_SNAKE_CASE__											=			os.path.join(self.tmpdirname   ,				VOCAB_FILES_NAMES['''vocab_file''']     )
        SCREAMING_SNAKE_CASE__											=			os.path.join(self.tmpdirname   ,				VOCAB_FILES_NAMES['''merges_file''']     )
        with open(self.vocab_file   ,				'''w'''     ) as fp:
            fp.write(json.dumps(A_     )     )
        with open(self.merges_file   ,				'''w'''     ) as fp:
            fp.write('''\n'''.join(A_     )     )



    def  lowercase_					(       self   ,				A_     ):





        '''simple docstring'''

        SCREAMING_SNAKE_CASE__											=			'''lower newer'''
        SCREAMING_SNAKE_CASE__											=			'''lower newer'''
        return input_text, output_text



    def  lowercase_					(       self     ):





        '''simple docstring'''

        SCREAMING_SNAKE_CASE__											=			BioGptTokenizer(self.vocab_file   ,				self.merges_file     )

        SCREAMING_SNAKE_CASE__											=			'''lower'''
        SCREAMING_SNAKE_CASE__											=			['''low''', '''er</w>''']
        SCREAMING_SNAKE_CASE__											=			tokenizer.tokenize(A_     )
        self.assertListEqual(A_   ,				A_     )

        SCREAMING_SNAKE_CASE__											=			tokens + ['''<unk>''']
        SCREAMING_SNAKE_CASE__											=			[14, 15, 20]
        self.assertListEqual(tokenizer.convert_tokens_to_ids(A_     )   ,				A_     )




    @slow
    def  lowercase_					(       self     ):





        '''simple docstring'''

        SCREAMING_SNAKE_CASE__											=			BioGptTokenizer.from_pretrained('''microsoft/biogpt'''     )

        SCREAMING_SNAKE_CASE__											=			tokenizer.encode('''sequence builders'''   ,				add_special_tokens=A_     )
        SCREAMING_SNAKE_CASE__											=			tokenizer.encode('''multi-sequence build'''   ,				add_special_tokens=A_     )

        SCREAMING_SNAKE_CASE__											=			tokenizer.build_inputs_with_special_tokens(A_     )
        SCREAMING_SNAKE_CASE__											=			tokenizer.build_inputs_with_special_tokens(A_   ,				A_     )

        self.assertTrue(encoded_sentence == [2] + text     )
        self.assertTrue(encoded_pair == [2] + text + [2] + text_a     )
