code: 
  
  """simple docstring"""
  import os
  import pickle
  import tempfile
  import unittest
  from typing import Callable, Optional
  
  import numpy as np
  
  from transformers import (
      BatchEncoding,
      BertTokenizer,
      BertTokenizerFast,
      PreTrainedTokenizer,
      PreTrainedTokenizerFast,
      TensorType,
      TokenSpan,
      is_tokenizers_available,
  )
  from transformers.models.gpta.tokenization_gpta import GPTaTokenizer
  from transformers.testing_utils import CaptureStderr, require_flax, require_tf, require_tokenizers, require_torch, slow
  
  
  if is_tokenizers_available():
      from tokenizers import Tokenizer
      from tokenizers.models import WordPiece
  
  class 			lowerCamelCase  (					unittest.TestCase      ):
  
  
    '''simple docstring'''
  
  
  
  
  
  
  
    def    _a			(self       ,					_lowerCamelCase  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       str   				=						list(tokenizer_class.max_model_input_sizes.keys()  )
          for model_name in sa_models[:1]:
                UpperCAmelCase__ :       Optional[int]   				=						tokenizer_class.from_pretrained(_lowerCamelCase  )
                self.assertIsNotNone(_lowerCamelCase  )
                self.assertIsInstance(_lowerCamelCase       ,					_lowerCamelCase  )
                self.assertIsInstance(_lowerCamelCase       ,					_lowerCamelCase  )
  
                for special_tok in tokenizer.all_special_tokens:
                      self.assertIsInstance(_lowerCamelCase       ,					_lowerCamelCase  )
                      UpperCAmelCase__ :       Any   				=						tokenizer.convert_tokens_to_ids(_lowerCamelCase  )
                      self.assertIsInstance(_lowerCamelCase       ,					_lowerCamelCase  )
  
  
  
    def    _a			(self       ,					_lowerCamelCase       ,					_lowerCamelCase = None  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       Optional[Any]   				=						pickle.dumps(_lowerCamelCase  )
          self.assertIsNotNone(_lowerCamelCase  )
  
          UpperCAmelCase__ :       str   				=						pickle.loads(_lowerCamelCase  )
  
          # Ensure is_fast is correctly restored
          self.assertEqual(be_restored.is_fast       ,					be_original.is_fast  )
  
          # Ensure encodings are potentially correctly restored
          if be_original.is_fast:
                self.assertIsNotNone(be_restored.encodings  )
          else:
                self.assertIsNone(be_restored.encodings  )
  
          # Ensure the keys are the same
          for original_v, restored_v in zip(be_original.values()       ,					be_restored.values()  ):
                if equal_op:
                      self.assertTrue(equal_op(_lowerCamelCase       ,					_lowerCamelCase  )  )
                else:
                      self.assertEqual(_lowerCamelCase       ,					_lowerCamelCase  )
  
  
  
    @slow
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          self.check_tokenizer_from_pretrained(_lowerCamelCase  )
  
  
  
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          self.assertEqual(TensorType("""tf"""  )       ,					TensorType.TENSORFLOW  )
          self.assertEqual(TensorType("""pt"""  )       ,					TensorType.PYTORCH  )
          self.assertEqual(TensorType("""np"""  )       ,					TensorType.NUMPY  )
  
  
  
    @require_tokenizers
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          import numpy as np
  
          UpperCAmelCase__ :       List[str]   				=						BertTokenizer.from_pretrained("""bert-base-cased"""  )
          UpperCAmelCase__ :       List[str]   				=						BertTokenizerFast.from_pretrained("""bert-base-cased"""  )
  
          # Python no tensor
          with self.subTest("""BatchEncoding (Python, return_tensors=None)"""  ):
                self.assert_dump_and_restore(tokenizer_p("""Small example to encode"""  )  )
  
          with self.subTest("""BatchEncoding (Python, return_tensors=NUMPY)"""  ):
                self.assert_dump_and_restore(
                    tokenizer_p("""Small example to encode"""       ,					return_tensors=TensorType.NUMPY  )       ,					np.array_equal  )
  
          with self.subTest("""BatchEncoding (Rust, return_tensors=None)"""  ):
                self.assert_dump_and_restore(tokenizer_r("""Small example to encode"""  )  )
  
          with self.subTest("""BatchEncoding (Rust, return_tensors=NUMPY)"""  ):
                self.assert_dump_and_restore(
                    tokenizer_r("""Small example to encode"""       ,					return_tensors=TensorType.NUMPY  )       ,					np.array_equal  )
  
  
  
    @require_tf
    @require_tokenizers
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          import tensorflow as tf
  
          def tf_array_equals(_lowerCamelCase       ,					_lowerCamelCase  ):
                return tf.reduce_all(tf.equal(_lowerCamelCase       ,					_lowerCamelCase  )  )
  
          UpperCAmelCase__ :       Union[str, Any]   				=						BertTokenizer.from_pretrained("""bert-base-cased"""  )
          UpperCAmelCase__ :       str   				=						BertTokenizerFast.from_pretrained("""bert-base-cased"""  )
  
          with self.subTest("""BatchEncoding (Python, return_tensors=TENSORFLOW)"""  ):
                self.assert_dump_and_restore(
                    tokenizer_p("""Small example to encode"""       ,					return_tensors=TensorType.TENSORFLOW  )       ,					_lowerCamelCase  )
  
          with self.subTest("""BatchEncoding (Rust, return_tensors=TENSORFLOW)"""  ):
                self.assert_dump_and_restore(
                    tokenizer_r("""Small example to encode"""       ,					return_tensors=TensorType.TENSORFLOW  )       ,					_lowerCamelCase  )
  
  
  
    @require_torch
    @require_tokenizers
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          import torch
  
          UpperCAmelCase__ :       Any   				=						BertTokenizer.from_pretrained("""bert-base-cased"""  )
          UpperCAmelCase__ :       Optional[int]   				=						BertTokenizerFast.from_pretrained("""bert-base-cased"""  )
  
          with self.subTest("""BatchEncoding (Python, return_tensors=PYTORCH)"""  ):
                self.assert_dump_and_restore(
                    tokenizer_p("""Small example to encode"""       ,					return_tensors=TensorType.PYTORCH  )       ,					torch.equal  )
  
          with self.subTest("""BatchEncoding (Rust, return_tensors=PYTORCH)"""  ):
                self.assert_dump_and_restore(
                    tokenizer_r("""Small example to encode"""       ,					return_tensors=TensorType.PYTORCH  )       ,					torch.equal  )
  
  
  
    @require_tokenizers
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       List[str]   				=						BertTokenizer.from_pretrained("""bert-base-cased"""  )
          UpperCAmelCase__ :       str   				=						BertTokenizerFast.from_pretrained("""bert-base-cased"""  )
  
          with self.subTest("""Python Tokenizer"""  ):
                self.assertFalse(tokenizer_p("""Small example to_encode"""  ).is_fast  )
  
          with self.subTest("""Rust Tokenizer"""  ):
                self.assertTrue(tokenizer_r("""Small example to_encode"""  ).is_fast  )
  
  
  
    @require_tokenizers
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       Optional[int]   				=						BertTokenizerFast.from_pretrained("""bert-base-cased"""  )
          UpperCAmelCase__ :       Union[str, Any]   				=						tokenizer_r(["""Test""", """\xad""", """test"""]       ,					is_split_into_words=_lowerCamelCase  )
  
          self.assertEqual(encoded.word_to_tokens(0  )       ,					TokenSpan(start=1       ,					end=2  )  )
          self.assertEqual(encoded.word_to_tokens(1  )       ,					_lowerCamelCase  )
          self.assertEqual(encoded.word_to_tokens(2  )       ,					TokenSpan(start=2       ,					end=3  )  )
  
  
  
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       Tuple   				=						BatchEncoding({"""inputs""": [[1, 2, 3], [4, 5, 6]], """labels""": [0, 1]}  )
          UpperCAmelCase__ :       Any   				=						batch.convert_to_tensors(tensor_type="""np"""  )
          self.assertEqual(tensor_batch["""inputs"""].shape       ,					(2, 3)  )
          self.assertEqual(tensor_batch["""labels"""].shape       ,					(2,)  )
          # test converting the converted
          with CaptureStderr() as cs:
                UpperCAmelCase__ :       Any   				=						batch.convert_to_tensors(tensor_type="""np"""  )
          self.assertFalse(len(cs.err  )       ,					msg=F"""should have no warning, but got {cs.err}"""  )
  
          UpperCAmelCase__ :       Any   				=						BatchEncoding({"""inputs""": [1, 2, 3], """labels""": 0}  )
          UpperCAmelCase__ :       List[Any]   				=						batch.convert_to_tensors(tensor_type="""np"""       ,					prepend_batch_axis=_lowerCamelCase  )
          self.assertEqual(tensor_batch["""inputs"""].shape       ,					(1, 3)  )
          self.assertEqual(tensor_batch["""labels"""].shape       ,					(1,)  )
  
  
  
    @require_torch
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       Union[str, Any]   				=						BatchEncoding({"""inputs""": [[1, 2, 3], [4, 5, 6]], """labels""": [0, 1]}  )
          UpperCAmelCase__ :       Optional[Any]   				=						batch.convert_to_tensors(tensor_type="""pt"""  )
          self.assertEqual(tensor_batch["""inputs"""].shape       ,					(2, 3)  )
          self.assertEqual(tensor_batch["""labels"""].shape       ,					(2,)  )
          # test converting the converted
          with CaptureStderr() as cs:
                UpperCAmelCase__ :       Union[str, Any]   				=						batch.convert_to_tensors(tensor_type="""pt"""  )
          self.assertFalse(len(cs.err  )       ,					msg=F"""should have no warning, but got {cs.err}"""  )
  
          UpperCAmelCase__ :       int   				=						BatchEncoding({"""inputs""": [1, 2, 3], """labels""": 0}  )
          UpperCAmelCase__ :       Union[str, Any]   				=						batch.convert_to_tensors(tensor_type="""pt"""       ,					prepend_batch_axis=_lowerCamelCase  )
          self.assertEqual(tensor_batch["""inputs"""].shape       ,					(1, 3)  )
          self.assertEqual(tensor_batch["""labels"""].shape       ,					(1,)  )
  
  
  
    @require_tf
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       Any   				=						BatchEncoding({"""inputs""": [[1, 2, 3], [4, 5, 6]], """labels""": [0, 1]}  )
          UpperCAmelCase__ :       Optional[Any]   				=						batch.convert_to_tensors(tensor_type="""tf"""  )
          self.assertEqual(tensor_batch["""inputs"""].shape       ,					(2, 3)  )
          self.assertEqual(tensor_batch["""labels"""].shape       ,					(2,)  )
          # test converting the converted
          with CaptureStderr() as cs:
                UpperCAmelCase__ :       List[Any]   				=						batch.convert_to_tensors(tensor_type="""tf"""  )
          self.assertFalse(len(cs.err  )       ,					msg=F"""should have no warning, but got {cs.err}"""  )
  
          UpperCAmelCase__ :       List[str]   				=						BatchEncoding({"""inputs""": [1, 2, 3], """labels""": 0}  )
          UpperCAmelCase__ :       Optional[int]   				=						batch.convert_to_tensors(tensor_type="""tf"""       ,					prepend_batch_axis=_lowerCamelCase  )
          self.assertEqual(tensor_batch["""inputs"""].shape       ,					(1, 3)  )
          self.assertEqual(tensor_batch["""labels"""].shape       ,					(1,)  )
  
  
  
    @require_flax
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       str   				=						BatchEncoding({"""inputs""": [[1, 2, 3], [4, 5, 6]], """labels""": [0, 1]}  )
          UpperCAmelCase__ :       int   				=						batch.convert_to_tensors(tensor_type="""jax"""  )
          self.assertEqual(tensor_batch["""inputs"""].shape       ,					(2, 3)  )
          self.assertEqual(tensor_batch["""labels"""].shape       ,					(2,)  )
          # test converting the converted
          with CaptureStderr() as cs:
                UpperCAmelCase__ :       Any   				=						batch.convert_to_tensors(tensor_type="""jax"""  )
          self.assertFalse(len(cs.err  )       ,					msg=F"""should have no warning, but got {cs.err}"""  )
  
          UpperCAmelCase__ :       Optional[Any]   				=						BatchEncoding({"""inputs""": [1, 2, 3], """labels""": 0}  )
          UpperCAmelCase__ :       List[str]   				=						batch.convert_to_tensors(tensor_type="""jax"""       ,					prepend_batch_axis=_lowerCamelCase  )
          self.assertEqual(tensor_batch["""inputs"""].shape       ,					(1, 3)  )
          self.assertEqual(tensor_batch["""labels"""].shape       ,					(1,)  )
  
  
  
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       Optional[int]   				=						[{"""input_ids""": np.array([0, 1, 2]  )}, {"""input_ids""": np.array([0, 1, 2, 3]  )}]
          UpperCAmelCase__ :       Optional[Any]   				=						BertTokenizer.from_pretrained("""bert-base-cased"""  )
  
          UpperCAmelCase__ :       int   				=						tokenizer.pad(_lowerCamelCase       ,					padding=_lowerCamelCase  )
          self.assertTrue(isinstance(batch["""input_ids"""]       ,					np.ndarray  )  )
          self.assertEqual(batch["""input_ids"""].tolist()       ,					[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]  )
          UpperCAmelCase__ :       Any   				=						tokenizer.pad(_lowerCamelCase       ,					padding=_lowerCamelCase       ,					return_tensors="""np"""  )
          self.assertTrue(isinstance(batch["""input_ids"""]       ,					np.ndarray  )  )
          self.assertEqual(batch["""input_ids"""].tolist()       ,					[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]  )
  
  
  
    @require_torch
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          import torch
  
          UpperCAmelCase__ :       int   				=						[{"""input_ids""": torch.tensor([0, 1, 2]  )}, {"""input_ids""": torch.tensor([0, 1, 2, 3]  )}]
          UpperCAmelCase__ :       Any   				=						BertTokenizer.from_pretrained("""bert-base-cased"""  )
  
          UpperCAmelCase__ :       Any   				=						tokenizer.pad(_lowerCamelCase       ,					padding=_lowerCamelCase  )
          self.assertTrue(isinstance(batch["""input_ids"""]       ,					torch.Tensor  )  )
          self.assertEqual(batch["""input_ids"""].tolist()       ,					[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]  )
          UpperCAmelCase__ :       Any   				=						tokenizer.pad(_lowerCamelCase       ,					padding=_lowerCamelCase       ,					return_tensors="""pt"""  )
          self.assertTrue(isinstance(batch["""input_ids"""]       ,					torch.Tensor  )  )
          self.assertEqual(batch["""input_ids"""].tolist()       ,					[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]  )
  
  
  
    @require_tf
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          import tensorflow as tf
  
          UpperCAmelCase__ :       Dict   				=						[{"""input_ids""": tf.constant([0, 1, 2]  )}, {"""input_ids""": tf.constant([0, 1, 2, 3]  )}]
          UpperCAmelCase__ :       List[Any]   				=						BertTokenizer.from_pretrained("""bert-base-cased"""  )
  
          UpperCAmelCase__ :       Optional[Any]   				=						tokenizer.pad(_lowerCamelCase       ,					padding=_lowerCamelCase  )
          self.assertTrue(isinstance(batch["""input_ids"""]       ,					tf.Tensor  )  )
          self.assertEqual(batch["""input_ids"""].numpy().tolist()       ,					[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]  )
          UpperCAmelCase__ :       Union[str, Any]   				=						tokenizer.pad(_lowerCamelCase       ,					padding=_lowerCamelCase       ,					return_tensors="""tf"""  )
          self.assertTrue(isinstance(batch["""input_ids"""]       ,					tf.Tensor  )  )
          self.assertEqual(batch["""input_ids"""].numpy().tolist()       ,					[[0, 1, 2, tokenizer.pad_token_id], [0, 1, 2, 3]]  )
  
  
  
    @require_tokenizers
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       Optional[Any]   				=						Tokenizer(WordPiece(unk_token="""[UNK]"""  )  )
          PreTrainedTokenizerFast(tokenizer_object=_lowerCamelCase  )
  
  
  
  
    @require_tokenizers
    def    _a			(self  ):
  
  
          """simple docstring"""
  
          UpperCAmelCase__ :       Dict   				=						Tokenizer(WordPiece(unk_token="""[UNK]"""  )  )
          with tempfile.TemporaryDirectory() as tmpdirname:
                bert_tokenizer.save(os.path.join(_lowerCamelCase       ,					"""tokenizer.json"""  )  )
                PreTrainedTokenizerFast(tokenizer_file=os.path.join(_lowerCamelCase       ,					"""tokenizer.json"""  )  )
  
  
style_context: 
  
  """simple docstring"""
  def 				a__	(	lowerCAmelCase ,  lowerCAmelCase						)  ->   str:
        if not isinstance(lowerCAmelCase ,  lowerCAmelCase						):
              raise TypeError("""plaintext must be a string"""						)
        if not isinstance(lowerCAmelCase ,  lowerCAmelCase						):
              raise TypeError("""key must be a string"""						)
  
        if not plaintext:
              raise ValueError("""plaintext is empty"""						)
        if not key:
              raise ValueError("""key is empty"""						)
  
        key += plaintext
        UpperCAmelCase__ :       Dict						=						plaintext.lower()
        UpperCAmelCase__ :       Tuple						=						key.lower()
        UpperCAmelCase__ :       Optional[int]						=						0
        UpperCAmelCase__ :       Tuple						=						0
        UpperCAmelCase__ :       Optional[int]						=						""""""
        while plaintext_iterator < len(lowerCAmelCase						):
              if (
                  ord(plaintext[plaintext_iterator]						) < 97
                  or ord(plaintext[plaintext_iterator]						) > 1_22
              ):
                    ciphertext += plaintext[plaintext_iterator]
                    plaintext_iterator += 1
              elif ord(key[key_iterator]						) < 97 or ord(key[key_iterator]						) > 1_22:
                    key_iterator += 1
              else:
                    ciphertext += chr(
                        (
                            (ord(plaintext[plaintext_iterator]						) - 97 + ord(key[key_iterator]						))
                            - 97
                        )
                        % 26
                        + 97						)
                    key_iterator += 1
                    plaintext_iterator += 1
        return ciphertext
  
  
  
  
  def 				a__	(	lowerCAmelCase ,  lowerCAmelCase						)  ->   str:
        if not isinstance(lowerCAmelCase ,  lowerCAmelCase						):
              raise TypeError("""ciphertext must be a string"""						)
        if not isinstance(lowerCAmelCase ,  lowerCAmelCase						):
              raise TypeError("""key must be a string"""						)
  
        if not ciphertext:
              raise ValueError("""ciphertext is empty"""						)
        if not key:
              raise ValueError("""key is empty"""						)
  
        UpperCAmelCase__ :       Union[str, Any]						=						key.lower()
        UpperCAmelCase__ :       int						=						0
        UpperCAmelCase__ :       int						=						0
        UpperCAmelCase__ :       int						=						""""""
        while ciphertext_iterator < len(lowerCAmelCase						):
              if (
                  ord(ciphertext[ciphertext_iterator]						) < 97
                  or ord(ciphertext[ciphertext_iterator]						) > 1_22
              ):
                    plaintext += ciphertext[ciphertext_iterator]
              else:
                    plaintext += chr(
                        (ord(ciphertext[ciphertext_iterator]						) - ord(key[key_iterator]						)) % 26
                        + 97						)
                    key += chr(
                        (ord(ciphertext[ciphertext_iterator]						) - ord(key[key_iterator]						)) % 26
                        + 97						)
                    key_iterator += 1
              ciphertext_iterator += 1
        return plaintext
  
  
  if __name__ == "__main__":
      import doctest
  
      doctest.testmod()
      _A						=     int(input("""Type 1 to encrypt or 2 to decrypt:"""))
      if operation == 1:
          _A						=     input("""Typeplaintext to be encrypted:\n""")
          _A						=     input("""Type the key:\n""")
          print(encrypt(plaintext, key))
      elif operation == 2:
          _A						=     input("""Type the ciphertext to be decrypted:\n""")
          _A						=     input("""Type the key:\n""")
          print(decrypt(ciphertext, key))
      decrypt("""jsqqs avvwo""", """coffee""")
  
  