code: def __init__(
      self,
      type,
      idim,
      layers,
      units,
      projs,
      dropout,
      nmask=1,
      nonlinear="sigmoid",
  ):
      super().__init__()
      subsample = np.ones(layers + 1, dtype=np.int64)
  
      typ = type.lstrip("vgg").rstrip("p")
      if type[-1] == "p":
          self.brnn = RNNP(
              idim, layers, units, projs, subsample, dropout, typ=typ
          )
      else:
          self.brnn = RNN(idim, layers, units, projs, dropout, typ=typ)
  
      self.type = type
      self.nmask = nmask
      self.linears = torch.nn.ModuleList(
          [torch.nn.Linear(projs, idim) for _ in range(nmask)]
      )
  
      if nonlinear not in ("sigmoid", "relu", "tanh", "crelu"):
          raise ValueError(
              "Not supporting nonlinear={}".format(nonlinear)
          )
  
      self.nonlinear = nonlinear
  
file_path: espnet/espnet2/enh/layers/mask_estimator.py
imports: from typing import Tuple, Union
  import numpy
  import torch
  from packaging.version import parse
  from torch.nn import functional
  from torch_complex.tensor import ComplexTensor
  from espnet2.enh.layers.complex_utils import is_complex
  from espnet.nets.pytorch_backend.nets_utils import make_pad_mask
  from espnet.nets.pytorch_backend.rnn.encoders import RNN, RNNP
label_desc: Use image node_id 1 to create a new MaskEstimator object from inherited base classes: torch.nn with example: obj = MaskEstimator(type, idim, layers, units, projs, dropout, nmask, nonlinear)