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 load_state_dict(self, state_dict, strict: bool = True):
      self.class_means = state_dict["class_means"]
      self.class_covs = state_dict["class_covs"]
  
      super().load_state_dict(state_dict, strict)
  
      # fill dictionary
      if self.class_means is not None:
          for i in range(self.class_means.shape[0]):
              if (self.class_means[i] != 0).any():
                  self.class_means_dict[i] = self.class_means[i].clone()
  
      self.max_class = max(self.class_means_dict.keys())
  
      if self.class_covs is not None:
          for i in range(self.class_covs.shape[0]):
              if (self.class_covs[i] != 0).any():
                  self.class_cov_dict[i] = self.class_covs[i].clone()
  
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 19 for calling the FeCAMClassifier obj's underlying member method code with example usage: obj.load_state_dict(state_dict, strict) without return types