




"""simple docstring"""




import json
import os
import unittest

from transformers import DebertaTokenizer, DebertaTokenizerFast
from transformers.models.deberta.tokenization_deberta import VOCAB_FILES_NAMES
from transformers.testing_utils import slow

from ...test_tokenization_common import TokenizerTesterMixin




class       a__	( UpperCamelCase__       , unittest.TestCase				):
     a		:      Optional[Any]		 =     DebertaTokenizer
     a		:      Any		 =     True
     a		:      Optional[Any]		 =     DebertaTokenizerFast







     def       lowerCAmelCase_    (     self			)  ->   Tuple:



          '''simple docstring'''



          super().setUp()

          # Adapted from Sennrich et al. 2015 and https://github.com/rsennrich/subword-nmt
          a     =				[
              'l',
              'o',
              'w',
              'e',
              'r',
              's',
              't',
              'i',
              'd',
              'n',
              '\u0120',
              '\u0120l',
              '\u0120n',
              '\u0120lo',
              '\u0120low',
              'er',
              '\u0120lowest',
              '\u0120newer',
              '\u0120wider',
              '[UNK]',
          ]
          a     =				dict(zip(A  ,		range(len(A			)			)			)			)
          a     =				['#version: 0.2', '\u0120 l', '\u0120l o', '\u0120lo w', 'e r', '']
          a     =				{'unk_token': '[UNK]'}

          a     =				os.path.join(self.tmpdirname  ,		VOCAB_FILES_NAMES["vocab_file"]			)
          a     =				os.path.join(self.tmpdirname  ,		VOCAB_FILES_NAMES["merges_file"]			)
          with open(self.vocab_file  ,		"w"  ,		encoding="utf-8"			) as fp:
               fp.write(json.dumps(A			) + "\n"			)
          with open(self.merges_file  ,		"w"  ,		encoding="utf-8"			) as fp:
               fp.write("\n".join(A			)			)







     def       lowerCAmelCase_    (     self  ,		**A			)  ->   List[Any]:



          '''simple docstring'''



          kwargs.update(self.special_tokens_map			)
          return self.tokenizer_class.from_pretrained(self.tmpdirname  ,		**A			)







     def       lowerCAmelCase_    (     self  ,		A			)  ->   Optional[int]:



          '''simple docstring'''



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







     def       lowerCAmelCase_    (     self			)  ->   List[Any]:



          '''simple docstring'''



          a     =				self.get_tokenizer()
          a     =				'lower newer'
          a     =				['l', 'o', 'w', 'er', '\u0120', 'n', 'e', 'w', 'er']
          a     =				tokenizer.tokenize(A			)
          self.assertListEqual(A  ,		A			)

          a     =				tokens + [tokenizer.unk_token]
          a     =				[0, 1, 2, 15, 10, 9, 3, 2, 15, 19]
          self.assertListEqual(tokenizer.convert_tokens_to_ids(A			)  ,		A			)







     def       lowerCAmelCase_    (     self			)  ->   List[str]:



          '''simple docstring'''



          a     =				self.get_tokenizer()
          a     =				tokenizer("Hello"  ,		"World"			)
          a     =				[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1]
          self.assertListEqual(tokd["token_type_ids"]  ,		A			)







     @slow
     def       lowerCAmelCase_    (     self			)  ->   Optional[Any]:



          '''simple docstring'''



          a     =				self.tokenizer_class.from_pretrained("microsoft/deberta-base"			)

          a     =				tokenizer.encode("sequence builders"  ,		add_special_tokens=A			)
          a     =				tokenizer.encode("multi-sequence build"  ,		add_special_tokens=A			)

          a     =				tokenizer.encode(
              "sequence builders"  ,		add_special_tokens=A  ,		add_prefix_space=A			)
          a     =				tokenizer.encode(
              "sequence builders"  ,		"multi-sequence build"  ,		add_special_tokens=A  ,		add_prefix_space=A			)

          a     =				tokenizer.build_inputs_with_special_tokens(A			)
          a     =				tokenizer.build_inputs_with_special_tokens(A  ,		A			)

          assert encoded_sentence == encoded_text_from_decode
          assert encoded_pair == encoded_pair_from_decode







     @slow
     def       lowerCAmelCase_    (     self			)  ->   Optional[Any]:



          '''simple docstring'''



          a     =				[self.tokenizer_class]
          if self.test_rust_tokenizer:
               tokenizer_classes.append(self.rust_tokenizer_class			)

          for tokenizer_class in tokenizer_classes:
               a     =				tokenizer_class.from_pretrained("microsoft/deberta-base"			)

               a     =				[
                   'ALBERT: A Lite BERT for Self-supervised Learning of Language Representations',
                   'ALBERT incorporates two parameter reduction techniques',
                   'The first one is a factorized embedding parameterization. By decomposing the large vocabulary'
                   ' embedding matrix into two small matrices, we separate the size of the hidden layers from the size of'
                   ' vocabulary embedding.',
               ]

               a     =				tokenizer(A  ,		padding=A			)
               a     =				[tokenizer.decode(A  ,		skip_special_tokens=A			) for seq in encoding['input_ids']]

               # fmt: off
               a     =				{
                   'input_ids': [
                       [1, 2118, 11126, 565, 35, 83, 25191, 163, 18854, 13, 12156, 12, 16101, 25376, 13807, 9, 22205, 27893, 1635, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                       [1, 2118, 11126, 565, 24536, 80, 43797, 4878, 7373, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                       [1, 133, 78, 65, 16, 10, 3724, 1538, 33183, 11303, 43797, 1938, 4, 870, 24165, 29105, 5, 739, 32644, 33183, 11303, 36173, 88, 80, 650, 7821, 45940, 6, 52, 2559, 5, 1836, 9, 5, 7397, 13171, 31, 5, 1836, 9, 32644, 33183, 11303, 4, 2]
                   ],
                   'token_type_ids': [
                       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
                   ],
                   'attention_mask': [
                       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
                   ]
               }
               # fmt: on

               a     =				[
                   'ALBERT: A Lite BERT for Self-supervised Learning of Language Representations',
                   'ALBERT incorporates two parameter reduction techniques',
                   'The first one is a factorized embedding parameterization. By decomposing the large vocabulary'
                   ' embedding matrix into two small matrices, we separate the size of the hidden layers from the size of'
                   ' vocabulary embedding.',
               ]

               self.assertDictEqual(encoding.data  ,		A			)

               for expected, decoded in zip(A  ,		A			):
                    self.assertEqual(A  ,		A			)







from manim import *




class       a__	( UpperCamelCase__				):







     def       lowerCAmelCase_    (     self			)  ->   List[Any]:



          '''simple docstring'''



          a     =				Rectangle(height=0.5  ,		width=0.5			)
          a     =				Rectangle(height=0.4_6  ,		width=0.4_6			).set_stroke(width=0			)

          a     =				Rectangle(height=0.2_5  ,		width=0.2_5			)

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

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

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

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

          a     =				[]
          a     =				[]

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

               a     =				Rectangle(height=0.4_6  ,		width=0.4_6			).set_stroke(width=0.0			).set_fill(A  ,		opacity=0.8			)
               cpu_target.move_to(cpu_left_col_base[i]			)
               model_cpu_arr.append(A			)

          self.add(*A  ,		*A			)

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

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

          self.add(A  ,		A			)

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

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

          a     =				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(A			)			)

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

          self.play(Write(A			)			)

          input.generate_target()
          input.target.next_to(model_arr[0]  ,		direction=A  ,		buff=0.0_2			)
          self.play(MoveToTarget(A			)			)

          self.play(FadeOut(A			)			)

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

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

          a     =				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(A  ,		run_time=3			)			)

          a     =				{"run_time": 1, "fade_in": True, "fade_out": True, "buff": 0.0_2}

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

          a     =				a.copy()
          for i in range(6			):
               a_c.next_to(model_arr[i].get_right() + 0.0_2  ,		A  ,		buff=0.2			)

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

               a     =				AnimationGroup(
                   FadeOut(A  ,		run_time=0.5			)  ,		MoveToTarget(A  ,		run_time=0.5			)  ,		FadeIn(A  ,		run_time=0.5			)  ,		lag_ratio=0.2			)

               self.play(A			)

               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:
                         a     =				0.7

                    self.play(
                        Circumscribe(model_arr[i]  ,		**A			)  ,		Circumscribe(cpu_left_col_base[i]  ,		**A			)  ,		Circumscribe(cpu_left_col_base[i + 1]  ,		color=A  ,		**A			)  ,		Circumscribe(gpu_rect[0]  ,		color=A  ,		**A			)  ,		Circumscribe(model_arr[i + 1]  ,		color=A  ,		**A			)  ,		)
                    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.0_2  ,		buff=0.2			)

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

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

               a     =				a_c
               a     =				a_c.copy()

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

          a     =				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(A  ,		run_time=3			)  ,		MoveToTarget(A			)			)

          self.wait()

