docstr: Making a forward pass of layer normalization.
  
  Arg types:
      * **X** (Pytorch Float Tensor) - Input tensor,
          with shape (batch_size, feature_dim, num_nodes, seq_len).
      * **idx** (Pytorch Long Tensor) - Input indices.
  
  Return types:
      * **X** (PyTorch Float Tensor) - Output tensor,
          with shape (batch_size, feature_dim, num_nodes, seq_len).
code: def forward(
      self, X: torch.FloatTensor, idx: torch.LongTensor
  ) -> torch.FloatTensor:
      """
      Making a forward pass of layer normalization.
  
      Arg types:
          * **X** (Pytorch Float Tensor) - Input tensor,
              with shape (batch_size, feature_dim, num_nodes, seq_len).
          * **idx** (Pytorch Long Tensor) - Input indices.
  
      Return types:
          * **X** (PyTorch Float Tensor) - Output tensor,
              with shape (batch_size, feature_dim, num_nodes, seq_len).
      """
      if self._elementwise_affine:
          return F.layer_norm(
              X,
              tuple(X.shape[1:]),
              self._weight[:, idx, :],
              self._bias[:, idx, :],
              self._eps,
          )
      else:
          return F.layer_norm(
              X, tuple(X.shape[1:]), self._weight, self._bias, self._eps
          )
  
imports: from __future__ import division
  import numbers
  from typing import Optional
  import torch
  import torch.nn
  from torch.nn import init
  import torch.nn.functional
label_desc: Use image node_id 3 for calling the LayerNormalization obj's underlying member method code with example usage: obj.forward(X, idx) and returns: F, F