class_docstr: Progressive Neural Network layer.
  
  The adaptation phase assumes that each experience is a separate task.
  Multiple experiences with the same task label or multiple task labels
  within the same experience will result in a runtime error.
docstr: :param in_features: size of each input sample
  :param out_features_per_column:
      size of each output sample (single column)
  :param adapter: adapter type. One of {'linear', 'mlp'} (default='mlp')
docstr_tok: [":","param","in_features",":","size","of","each","input","sample",":","param","out_features_per_column",":","size","of","each","output","sample","(","single","column",")",":","param","adapter",":","adapter","type",".","One","of","{","'linear","'",",","'mlp","'","}","(","default='mlp","'",")"]
code: def __init__(
      self, in_features, out_features_per_column, adapter="mlp"
  ):
      """
      :param in_features: size of each input sample
      :param out_features_per_column:
          size of each output sample (single column)
      :param adapter: adapter type. One of {'linear', 'mlp'} (default='mlp')
      """
      super().__init__()
      self.in_features = in_features
      self.out_features_per_column = out_features_per_column
      self.adapter = adapter
  
      # convert from task label to module list order
      self.task_to_module_idx = {}
      first_col = PNNColumn(
          in_features, out_features_per_column, 0, adapter=adapter
      )
      self.columns = nn.ModuleList([first_col])
  
imports: import torch
  import torch.nn.functional
  from torch import nn
  from avalanche.benchmarks.utils.flat_data import ConstantSequence
  from avalanche.models import MultiTaskModule
  from avalanche.models import MultiHeadClassifier
  from avalanche.benchmarks.scenarios import CLExperience
label_desc: Use image node_id 1 to create a new PNNLayer object from inherited base classes: MultiTaskModule with example: obj = PNNLayer(in_features, out_features_per_column, adapter)