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 apply_cov_transforms(self, class_cov):
      if self.shrinkage:
          for key, cov in class_cov.items():
              class_cov[key] = self._shrink_cov(cov)
              class_cov[key] = self._shrink_cov(class_cov[key])
      if self.covnorm:
          class_cov = self._normalize_cov(class_cov)
      return class_cov
  
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 18 for calling the FeCAMClassifier obj's underlying member method code with example usage: obj.apply_cov_transforms(class_cov) and returns: class_cov