class_docstr: This variant of U-Net handles complex-value input/output. It can be
  used as a model to learn sensitivity maps in multi-coil MRI data. It is
  built based on :py:class:`monai.networks.nets.BasicUNet` by default but the user
  can input their convolutional model as well.
  ComplexUnet also applies default normalization to the input which makes it more stable to train.
  
  The data being a (complex) 2-channel tensor is a requirement for using this model.
  
  Modified and adopted from: https://github.com/facebookresearch/fastMRI
  
  Args:
      spatial_dims: number of spatial dimensions.
      features: six integers as numbers of features. denotes number of channels in each layer.
      act: activation type and arguments. Defaults to LeakyReLU.
      norm: feature normalization type and arguments. Defaults to instance norm.
      bias: whether to have a bias term in convolution blocks. Defaults to True.
      dropout: dropout ratio. Defaults to 0.0.
      upsample: upsampling mode, available options are
          ``"deconv"``, ``"pixelshuffle"``, ``"nontrainable"``.
      pad_factor: an integer denoting the number which each padded dimension will be divisible to.
          For example, 16 means each dimension will be divisible by 16 after padding
      conv_net: the learning model used inside the ComplexUnet. The default
          is :py:class:`monai.networks.nets.basic_unet`. The only requirement on the model is to
          have 2 as input and output number of channels.
docstr: Args:
      x: input of shape (B,C,H,W,2) for 2D data or (B,C,H,W,D,2) for 3D data
  
  Returns:
      output of shape (B,C,H,W,2) for 2D data or (B,C,H,W,D,2) for 3D data
docstr_tok: ["Args",":","x",":","input","of","shape","(","B",",","C",",","H",",","W,2",")","for","2D","data","or","(","B",",","C",",","H",",","W",",","D,2",")","for","3D","data","Returns",":","output","of","shape","(","B",",","C",",","H",",","W,2",")","for","2D","data","or","(","B",",","C",",","H",",","W",",","D,2",")","for","3D","data"]
code: def forward(self, x: Tensor) -> Tensor:
      """
      Args:
          x: input of shape (B,C,H,W,2) for 2D data or (B,C,H,W,D,2) for 3D data
  
      Returns:
          output of shape (B,C,H,W,2) for 2D data or (B,C,H,W,D,2) for 3D data
      """
      # suppose the input is 2D, the comment in front of each operator below shows the shape after that operator
      x = reshape_complex_to_channel_dim(
          x
      )  # x will be of shape (B,C*2,H,W)
      x, mean, std = complex_normalize(
          x
      )  # x will be of shape (B,C*2,H,W)
      # pad input
      x, padding_sizes = divisible_pad_t(
          x, k=self.pad_factor
      )  # x will be of shape (B,C*2,H',W') where H' and W' are for after padding
  
      x = self.unet(x)
      # inverse padding
      x = inverse_divisible_pad_t(
          x, padding_sizes
      )  # x will be of shape (B,C*2,H,W)
  
      x = x * std + mean
      x = reshape_channel_complex_to_last_dim(
          x
      )  # x will be of shape (B,C,H,W,2)
      return x
  
file_path: MONAI/monai/apps/reconstruction/networks/nets/complex_unet.py
imports: from __future__ import annotations
  from collections.abc import Sequence
  import torch.nn
  from torch import Tensor
  from monai.apps.reconstruction.networks.nets.utils import complex_normalize, divisible_pad_t, inverse_divisible_pad_t, reshape_channel_complex_to_last_dim, reshape_complex_to_channel_dim
  from monai.networks.nets.basic_unet import BasicUNet
label_desc: Use image node_id 2 for calling the ComplexUnet obj's underlying member method code with example usage: obj.forward(x) and returns: x