class_docstr: The implementation of the prototypical verbalizer in `Prototypical Verbalizer for Prompt-based Few-shot Tuning <https://arxiv.org/pdf/2104.08691v1.pdf>`_ This class is inherited from the :obj:`Verbalizer` class.
  
  Args:
      tokenizer (:obj:`PreTrainedTokenizer`): The tokenizer of the current pre-trained model to point out the vocabulary.
      classes (:obj:`List[Any]`): The classes (or labels) of the current task.
      label_words (:obj:`Union[List[str], List[List[str]], Dict[List[str]]]`, optional): The label words that are projected by the labels.
      prefix (:obj:`str`, optional): The prefix string of the verbalizer (used in PLMs like RoBERTa, which is sensitive to prefix space)
      multi_token_handler (:obj:`str`, optional): The handling strategy for multiple tokens produced by the tokenizer.
      post_log_softmax (:obj:`bool`, optional): Whether to apply log softmax post processing on label_logits. Default to True.
      lr: (:obj:`float`, optional): The learning rate for prototypes.
      mid_dim: (:obj:`int`, optional): The dimension of prototype embeddings.
      epochs: (:obj:`int`, optional): The training epochs of prototypes.
      multi_verb (:obj:`str`, optional): `multi` to ensemble with manual verbalizers, `proto` to use only ProtoVerb.
docstr: A whole framework to process the original logits over the vocabulary, which contains four steps:
  
  (1) Project the logits into logits of label words
  
  if self.post_log_softmax is True:
  
      (2) Normalize over all label words
  
      (3) Calibrate (optional)
  
  (4) Aggregate (for multiple label words)
  
  Args:
      logits (:obj:`torch.Tensor`): The original logits.
  
  Returns:
      (:obj:`torch.Tensor`): The final processed logits over the labels (classes).
docstr_tok: ["A","whole","framework","to","process","the","original","logits","over","the","vocabulary",",","which","contains","four","steps",":","(","1",")","Project","the","logits","into","logits","of","label","words","if","self.post_log_softmax","is","True",":","(","2",")","Normalize","over","all","label","words","(","3",")","Calibrate","(","optional",")","(","4",")","Aggregate","(","for","multiple","label","words",")","Args",":","logits","(",":","obj",":","`","torch.Tensor","`",")",":","The","original","logits",".","Returns",":","(",":","obj",":","`","torch.Tensor","`",")",":","The","final","processed","logits","over","the","labels","(","classes",")","."]
code: def process_logits(self, logits: torch.Tensor, **kwargs):
      r"""A whole framework to process the original logits over the vocabulary, which contains four steps:
  
      (1) Project the logits into logits of label words
  
      if self.post_log_softmax is True:
  
          (2) Normalize over all label words
  
          (3) Calibrate (optional)
  
      (4) Aggregate (for multiple label words)
  
      Args:
          logits (:obj:`torch.Tensor`): The original logits.
  
      Returns:
          (:obj:`torch.Tensor`): The final processed logits over the labels (classes).
      """
      # project
      label_words_logits = self.project(
          logits, **kwargs
      )  # Output: (batch_size, num_classes) or  (batch_size, num_classes, num_label_words_per_label)
  
      if self.post_log_softmax:
          # normalize
          # label_words_probs = self.normalize(label_words_logits)
  
          # calibrate
          if (
              hasattr(self, "_calibrate_logits")
              and self._calibrate_logits is not None
          ):
              label_words_probs = self.calibrate(
                  label_words_probs=label_words_probs
              )
  
          # convert to logits
          # label_words_logits = torch.log(label_words_probs+1e-15)
  
      # aggregate
      label_logits = self.aggregate(label_words_logits)
      return label_logits
  
imports: from inspect import Parameter
  import json
  from os import stat
  from transformers.file_utils import ModelOutput
  from transformers.tokenization_utils import PreTrainedTokenizer
  from transformers.utils.dummy_pt_objects import PreTrainedModel
  from yacs.config import CfgNode
  from openprompt.data_utils import InputFeatures
  import re
  from openprompt import Verbalizer
  from typing import *
  import torch
  import torch.nn
  import torch.nn.functional
  from openprompt.utils.logging import logger
  import copy
  from transformers.modeling_outputs import CausalLMOutputWithCrossAttentions, Seq2SeqLMOutput, MaskedLMOutput
  from transformers.models.t5 import T5ForConditionalGeneration
label_desc: Use image node_id 8 for calling the ProtoVerbalizer obj's underlying member method code with example usage: obj.process_logits(logits) and returns: label_logits