code: def encipher_vigenere(plaintext, plain_vocab, key):
      """Encrypt plain text with given key.
  
      Args:
        plaintext (list of list of Strings): a list of plain text to encrypt.
        plain_vocab (list of Integer): unique vocabularies being used.
        key (list of Integer): key to encrypt cipher using Vigenere table.
  
      Returns:
        ciphertext (list of Strings): encrypted plain text.
      """
      ciphertext = []
      # generate Vigenere table
      layers = [
          ShiftEncryptionLayer(plain_vocab, i)
          for i in range(len(plain_vocab))
      ]
  
      for i, sentence in enumerate(plaintext):
          cipher_sentence = []
          for j, character in enumerate(sentence):
              key_idx = key[j % len(key)]
              encrypted_char = layers[key_idx].encrypt_character(
                  character
              )
              cipher_sentence.append(encrypted_char)
          ciphertext.append(cipher_sentence)
  
      return ciphertext
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from collections import deque
  import numpy
  from tensor2tensor.data_generators import algorithmic
  from tensor2tensor.utils import registry
label_desc: Use image node_id 3 for calling a global function with example usage: encipher_vigenere(plaintext, plain_vocab, key) and returns: ciphertext