class_docstr: Deep Streaming Linear Discriminant Analysis.
  
  This strategy does not use backpropagation.
  Minibatches are first passed to the pretrained feature extractor.
  The result is processed one element at a time to fit the LDA.
  Original paper:
  "Hayes et. al., Lifelong Machine Learning with Deep Streaming Linear
  Discriminant Analysis, CVPR Workshop, 2020"
  https://openaccess.thecvf.com/content_CVPRW_2020/papers/w15/Hayes_Lifelong_Machine_Learning_With_Deep_Streaming_Linear_Discriminant_Analysis_CVPRW_2020_paper.pdf
class_docstr_tok: ["Deep","Streaming","Linear","Discriminant","Analysis",".","This","strategy","does","not","use","backpropagation",".","Minibatches","are","first","passed","to","the","pretrained","feature","extractor",".","The","result","is","processed","one","element","at","a","time","to","fit","the","LDA",".","Original","paper",":","''","Hayes","et",".","al.",",","Lifelong","Machine","Learning","with","Deep","Streaming","Linear","Discriminant","Analysis",",","CVPR","Workshop",",","2020","''","https",":","\/\/openaccess.thecvf.com\/content_CVPRW_2020\/papers\/w15\/Hayes_Lifelong_Machine_Learning_With_Deep_Streaming_Linear_Discriminant_Analysis_CVPRW_2020_paper.pdf"]
docstr: Check that the list of plugins is compatible with the template.
  
  This means checking that each plugin impements a subset of the
  supported callbacks.
docstr_tok: ["Check","that","the","list","of","plugins","is","compatible","with","the","template",".","This","means","checking","that","each","plugin","impements","a","subset","of","the","supported","callbacks","."]
code: def _check_plugin_compatibility(self):
      """Check that the list of plugins is compatible with the template.
  
      This means checking that each plugin impements a subset of the
      supported callbacks.
      """
      # TODO: ideally we would like to check the argument's type to check
      #  that it's a supertype of the template.
      # I don't know if it's possible to do it in Python.
      ps = self.plugins
  
      def get_plugins_from_object(obj):
          def is_callback(x):
              return x.startswith("before") or x.startswith("after")
  
          return filter(is_callback, dir(obj))
  
      cb_supported = set(get_plugins_from_object(self.PLUGIN_CLASS))
      cb_supported.remove("before_backward")
      cb_supported.remove("after_backward")
      for p in ps:
          cb_p = set(get_plugins_from_object(p))
  
          if not cb_p.issubset(cb_supported):
              warnings.warn(
                  f"Plugin {p} implements incompatible callbacks for template"
                  f" {self}. This may result in errors. Incompatible "
                  f"callbacks: {cb_p - cb_supported}",
              )
              return
  
imports: import warnings
  from typing import Callable, Optional, Sequence, Union
  import os
  import torch
  from avalanche.training.plugins import SupervisedPlugin
  from avalanche.training.templates import SupervisedTemplate
  from avalanche.training.plugins.evaluation import EvaluationPlugin, default_evaluator
  from avalanche.models.dynamic_modules import MultiTaskModule
  from avalanche.models import FeatureExtractorBackbone
label_desc: Use image node_id 10 for calling the StreamingLDA obj's underlying member method code with example usage: obj._check_plugin_compatibility() and returns: filter, unknown