class_docstr: PackNet implements the PackNet algorithm for parameter isolation. It
  is designed to automatically upgrade most models to support PackNet.
  But because of the nature of the strategy, it is not possible to use it
  with every model or PyTorch module. Furthermore, PackNet not everything
  has been implemented yet. Here are some basic guidelines:
  
   - Stateless modules like :class:`torch.nn.ReLU`, :class:`torch.nn.Flatten`,
      or `torch.nn.Dropout` should work fine.
   - Many normalization layers currently do not work.
   - Supports: :class:`nn.Linear`, :class:`nn.Conv1d`, :class:`nn.Conv2d`,
      :class:`nn.Conv3d`, :class:`nn.ConvTranspose1d`, :class:`nn.ConvTranspose2d`,
      :class:`nn.ConvTranspose3d`
   - If you want to use a custom module with state or parameters, ensure it
      implements :class:`PackNetModule`.
  
  
  Mallya, A., & Lazebnik, S. (2018). PackNet: Adding Multiple Tasks to a
  Single Network by Iterative Pruning. 2018 IEEE/CVF Conference on Computer
  Vision and Pattern Recognition, 7765-7773.
  https://doi.org/10.1109/CVPR.2018.00810
class_docstr_tok: ["PackNet","implements","the","PackNet","algorithm","for","parameter","isolation",".","It","is","designed","to","automatically","upgrade","most","models","to","support","PackNet",".","But","because","of","the","nature","of","the","strategy",",","it","is","not","possible","to","use","it","with","every","model","or","PyTorch","module",".","Furthermore",",","PackNet","not","everything","has","been","implemented","yet",".","Here","are","some","basic","guidelines",":","-","Stateless","modules","like",":","class",":","`","torch.nn.ReLU","`",",",":","class",":","`","torch.nn.Flatten","`",",","or","`","torch.nn.Dropout","`","should","work","fine",".","-","Many","normalization","layers","currently","do","not","work",".","-","Supports",":",":","class",":","`","nn.Linear","`",",",":","class",":","`","nn.Conv1d","`",",",":","class",":","`","nn.Conv2d","`",",",":","class",":","`","nn.Conv3d","`",",",":","class",":","`","nn.ConvTranspose1d","`",",",":","class",":","`","nn.ConvTranspose2d","`",",",":","class",":","`","nn.ConvTranspose3d","`","-","If","you","want","to","use","a","custom","module","with","state","or","parameters",",","ensure","it","implements",":","class",":","`","PackNetModule","`",".","Mallya",",","A.",",","&","Lazebnik",",","S.","(","2018",")",".","PackNet",":","Adding","Multiple","Tasks","to","a","Single","Network","by","Iterative","Pruning",".","2018","IEEE\/CVF","Conference","on","Computer","Vision","and","Pattern","Recognition",",","7765-7773.","https",":","\/\/doi.org\/10.1109\/CVPR.2018.00810"]
docstr: Wrap a PyTorch module to make it PackNet compatible.
  
  :param wrappee: The module to wrap
docstr_tok: ["Wrap","a","PyTorch","module","to","make","it","PackNet","compatible",".",":","param","wrappee",":","The","module","to","wrap"]
code: def __init__(self, wrappee: nn.Module) -> None:
      """Wrap a PyTorch module to make it PackNet compatible.
  
      :param wrappee: The module to wrap
      """
      super().__init__()
      self.wrappee: nn.Module = PackNetModel.wrap(wrappee)
  
imports: import typing
  import torch
  import torch.nn
  from torch import Tensor
  from torch.nn import functional
  from abc import ABC, abstractmethod
  from enum import Enum
  from avalanche.core import BaseSGDPlugin, Template
  from avalanche.models.dynamic_modules import MultiTaskModule
  from avalanche.models.simple_mlp import SimpleMLP
  from typing import Union
  from avalanche.training.templates.base_sgd import BaseSGDTemplate
label_desc: Use image node_id 2 to create a new PackNetModel object from inherited base classes: PackNetModule, MultiTaskModule with example: obj = PackNetModel(wrappee)