class_docstr: The model to encode virtual tokens into prompt embeddings.
  
  Args:
      config ([`PromptTuningConfig`]): The configuration of the prompt embedding.
      word_embeddings (`torch.nn.Module`): The word embeddings of the base transformer model.
  
  **Attributes**:
      - **embedding** (`torch.nn.Embedding`) -- The embedding layer of the prompt embedding.
  
  Example:
  
  ```py
  >>> from peft import PromptEmbedding, PromptTuningConfig
  
  >>> config = PromptTuningConfig(
  ...     peft_type="PROMPT_TUNING",
  ...     task_type="SEQ_2_SEQ_LM",
  ...     num_virtual_tokens=20,
  ...     token_dim=768,
  ...     num_transformer_submodules=1,
  ...     num_attention_heads=12,
  ...     num_layers=12,
  ...     prompt_tuning_init="TEXT",
  ...     prompt_tuning_init_text="Predict if sentiment of this review is positive, negative or neutral",
  ...     tokenizer_name_or_path="t5-base",
  ... )
  
  >>> # t5_model.shared is the word embeddings of the base model
  >>> prompt_embedding = PromptEmbedding(config, t5_model.shared)
  ```
  
  Input Shape: (`batch_size`, `total_virtual_tokens`)
  
  Output Shape: (`batch_size`, `total_virtual_tokens`, `token_dim`)
code: def forward(self, indices):
      # Just get embeddings
      prompt_embeddings = self.embedding(indices)
      return prompt_embeddings
  
imports: import math
  import torch
  from .config import PromptTuningInit
label_desc: Use image node_id 2 for calling the PromptEmbedding obj's underlying member method code with example usage: obj.forward(indices) and returns: prompt_embeddings