code: def __init__(
      self,
      input_size: int,
      hidden_size: int = None,
      skip_size: int = None,
      trainable_add: bool = False,
      dropout: float = None,
      layer_norm: nn.Module = nn.LayerNorm,
  ):
      super().__init__()
  
      self.input_size = input_size
      self.hidden_size = hidden_size or input_size
      self.skip_size = skip_size or self.hidden_size
      self.dropout = dropout
  
      self.glu = _GatedLinearUnit(
          self.input_size,
          hidden_size=self.hidden_size,
          dropout=self.dropout,
      )
      self.add_norm = _AddNorm(
          self.hidden_size,
          skip_size=self.skip_size,
          trainable_add=trainable_add,
          norm=layer_norm,
      )
  
imports: from typing import Dict, List, Optional, Tuple, Union
  import torch
  import torch.nn
  import torch.nn.functional
  from darts.logging import get_logger
  from darts.utils.torch import MonteCarloDropout
label_desc: Use image node_id 1 to create a new _GateAddNorm object from inherited base classes: nn with example: obj = _GateAddNorm(input_size, hidden_size, skip_size, trainable_add, dropout, layer_norm)