class_docstr: Mutated module in super-net.
  Usually, the feed-forward of the module itself is undefined.
  It has to be resampled with ``resample()`` so that a specific path is selected.
  (Sometimes, this is not required. For example, differentiable super-net.)
  
  A super-net module usually corresponds to one sample. But two exceptions:
  
  * A module can have multiple parameter spec. For example, a convolution-2d can sample kernel size, channels at the same time.
  * Multiple modules can share one parameter spec. For example, multiple layer choices with the same label.
  
  For value choice compositions, the parameter spec are bounded to the underlying (original) value choices,
  rather than their compositions.
docstr: This is a mutation hook that creates a :class:`BaseSuperNetModule`.
  The method should be implemented in each specific super-net module,
  because they usually have specific rules about what kind of modules to operate on.
  
  Parameters
  ----------
  module : nn.Module
      The module to be mutated (replaced).
  name : str
      Name of this module. With full prefix. For example, ``module1.block1.conv``.
  memo : dict
      Memo to enable sharing parameters among mutated modules. It should be read and written by
      mutate functions themselves.
  mutate_kwargs : dict
      Algo-related hyper-parameters, and some auxiliary information.
  
  Returns
  -------
  Union[BaseSuperNetModule, bool, tuple[BaseSuperNetModule, bool]]
      The mutation result, along with an optional boolean flag indicating whether to suppress follow-up mutation hooks.
      See :class:`BaseOneShotLightningModule <nni.retiarii.oneshot.pytorch.base_lightning.BaseOneShotLightningModule>` for details.
code: def mutate(
      cls,
      module: nn.Module,
      name: str,
      memo: dict[str, Any],
      mutate_kwargs: dict[str, Any],
  ) -> "BaseSuperNetModule" | bool | tuple["BaseSuperNetModule", bool]:
      """This is a mutation hook that creates a :class:`BaseSuperNetModule`.
      The method should be implemented in each specific super-net module,
      because they usually have specific rules about what kind of modules to operate on.
  
      Parameters
      ----------
      module : nn.Module
          The module to be mutated (replaced).
      name : str
          Name of this module. With full prefix. For example, ``module1.block1.conv``.
      memo : dict
          Memo to enable sharing parameters among mutated modules. It should be read and written by
          mutate functions themselves.
      mutate_kwargs : dict
          Algo-related hyper-parameters, and some auxiliary information.
  
      Returns
      -------
      Union[BaseSuperNetModule, bool, tuple[BaseSuperNetModule, bool]]
          The mutation result, along with an optional boolean flag indicating whether to suppress follow-up mutation hooks.
          See :class:`BaseOneShotLightningModule <nni.retiarii.oneshot.pytorch.base_lightning.BaseOneShotLightningModule>` for details.
      """
      raise NotImplementedError()
  
file_path: nni/nni/nas/oneshot/pytorch/supermodule/base.py
imports: from __future__ import annotations
  from typing import Any
  import torch.nn
  from nni.nas.nn.pytorch import MutableModule
label_desc: Use image node_id 4 for calling the BaseSuperNetModule obj's underlying member method code with example usage: obj.mutate(cls, module, name, memo, mutate_kwargs) without return types