class_docstr: FeCAMClassifier
  
  Similar to NCM but uses malahanobis distance instead of l2 distance
  
  This approach has been proposed for continual learning in
  "FeCAM: Exploiting the Heterogeneity of Class Distributions
  in Exemplar-Free Continual Learning" Goswami et. al.
  (Neurips 2023)
  
  This requires the storage of full per-class covariance matrices
code: def eval_adaptation(self, experience):
      classes = experience.classes_in_this_experience
      for k in classes:
          self.max_class = max(k, self.max_class)
  
      if len(self.class_means_dict) > 0:
          self.init_missing_classes(
              classes,
              list(self.class_means_dict.values())[0].shape[0],
              list(self.class_means_dict.values())[0].device,
          )
  
imports: import copy
  from typing import Dict
  import numpy
  import torch
  import torch.nn.functional
  import tqdm
  from torch import Tensor, nn
  from avalanche.models import DynamicModule
label_desc: Use image node_id 15 for calling the FeCAMClassifier obj's underlying member method code with example usage: obj.eval_adaptation(experience) without return types