def METHOD_NAME(
    self,
    input: Union[torch.Tensor, ComplexTensor],
    ilens: torch.Tensor,
    additional: Optional[Dict] = None,
) -> Tuple[List[Union[torch.Tensor, ComplexTensor]], torch.Tensor, OrderedDict]:
    """Forward.
    Args:
        input (torch.Tensor or ComplexTensor): Encoded feature [B, T, N]
        ilens (torch.Tensor): input lengths [Batch]
        additional (Dict or None): other data included in model
            NOTE: not used in this model
    Returns:
        masked (List[Union(torch.Tensor, ComplexTensor)]): [(B, T, N), ...]
        ilens (torch.Tensor): (B,)
        others predicted data, e.g. masks: OrderedDict[
            'mask_spk1': torch.Tensor(Batch, Frames, Freq),
            'mask_spk2': torch.Tensor(Batch, Frames, Freq),
            ...
            'mask_spkn': torch.Tensor(Batch, Frames, Freq),
        ]
    """
    # if complex spectrum,
    if is_complex(input):
        feature = abs(input)
    else:
        feature = input
    x, ilens, _ = self.rnn(feature, ilens)
    masks = []
    for linear in self.linear:
        y = linear(x)
        y = self.nonlinear(y)
        masks.append(y)
    if self.predict_noise:
        *masks, mask_noise = masks
    masked = [input * m for m in masks]
    others = OrderedDict(
        zip(["mask_spk{}".format(i + 1) for i in range(len(masks))], masks)
    )
    if self.predict_noise:
        others["noise1"] = input * mask_noise
    return masked, ilens, others