class_docstr: Continual Prototype Evolution plugin.
  
  Each class has a prototype for nearest-neighbor classification.
  The prototypes are updated continually with an exponentially moving average,
  using class-balanced replay to keep the prototypes up-to-date.
  The embedding space is optimized using the PseudoPrototypicalProxy-loss,
  exploiting both prototypes and batch information.
  
  This plugin doesn't use task identities in training or eval
  (data incremental) and is designed for online learning (1 epoch per task).
class_docstr_tok: ["Continual","Prototype","Evolution","plugin",".","Each","class","has","a","prototype","for","nearest-neighbor","classification",".","The","prototypes","are","updated","continually","with","an","exponentially","moving","average",",","using","class-balanced","replay","to","keep","the","prototypes","up-to-date",".","The","embedding","space","is","optimized","using","the","PseudoPrototypicalProxy-loss",",","exploiting","both","prototypes","and","batch","information",".","This","plugin","does","n't","use","task","identities","in","training","or","eval","(","data","incremental",")","and","is","designed","for","online","learning","(","1","epoch","per","task",")","."]
docstr: Convert output scores to probabilities for other metrics like
  accuracy and forgetting. We only do it at this point because before
  this,we still need the embedding outputs to obtain the PPP-loss.
docstr_tok: ["Convert","output","scores","to","probabilities","for","other","metrics","like","accuracy","and","forgetting",".","We","only","do","it","at","this","point","because","before","this",",","we","still","need","the","embedding","outputs","to","obtain","the","PPP-loss","."]
code: def after_eval_iteration(self, strategy, **kwargs):
      """Convert output scores to probabilities for other metrics like
      accuracy and forgetting. We only do it at this point because before
      this,we still need the embedding outputs to obtain the PPP-loss.
      """
      strategy.mb_output = self._get_nearest_neigbor_distr(
          strategy.mb_output
      )
  
imports: from typing import Dict
  import torch
  from torch import Tensor
  from torch.nn.functional import normalize
  from torch.nn.modules import Module
  from avalanche.training.utils import get_last_fc_layer, swap_last_fc_layer
  from avalanche.training.plugins.strategy_plugin import SupervisedPlugin
  from avalanche.training.storage_policy import ClassBalancedBuffer
  from avalanche.benchmarks.utils.data_loader import ReplayDataLoader
label_desc: Use image node_id 10 for calling the CoPEPlugin obj's underlying member method code with example usage: obj.after_eval_iteration(strategy) without return types