docstr: Dilated Depth-wise Separable Convolution module.
  
  ::
      x |-> DDSConv(x) -> LayerNorm(x) -> GeLU(x) -> Conv1x1(x) -> LayerNorm(x) -> GeLU(x) -> + -> o
        |-------------------------------------------------------------------------------------^
  
  Args:
      channels ([type]): [description]
      kernel_size ([type]): [description]
      num_layers ([type]): [description]
      dropout_p (float, optional): [description]. Defaults to 0.0.
  
  Returns:
      torch.tensor: Network output masked by the input sequence mask.
docstr_tok: ["Dilated","Depth-wise","Separable","Convolution","module",".",":",":","x","|-",">","DDSConv","(","x",")","-",">","LayerNorm","(","x",")","-",">","GeLU","(","x",")","-",">","Conv1x1","(","x",")","-",">","LayerNorm","(","x",")","-",">","GeLU","(","x",")","-",">","+","-",">","o","|","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","--","-^","Args",":","channels","(","[","type","]",")",":","[","description","]","kernel_size","(","[","type","]",")",":","[","description","]","num_layers","(","[","type","]",")",":","[","description","]","dropout_p","(","float",",","optional",")",":","[","description","]",".","Defaults","to","0.0",".","Returns",":","torch.tensor",":","Network","output","masked","by","the","input","sequence","mask","."]
code: def __init__(
      self, channels, kernel_size, num_layers, dropout_p=0.0
  ) -> torch.tensor:
      """Dilated Depth-wise Separable Convolution module.
  
      ::
          x |-> DDSConv(x) -> LayerNorm(x) -> GeLU(x) -> Conv1x1(x) -> LayerNorm(x) -> GeLU(x) -> + -> o
            |-------------------------------------------------------------------------------------^
  
      Args:
          channels ([type]): [description]
          kernel_size ([type]): [description]
          num_layers ([type]): [description]
          dropout_p (float, optional): [description]. Defaults to 0.0.
  
      Returns:
          torch.tensor: Network output masked by the input sequence mask.
      """
      super().__init__()
      self.num_layers = num_layers
  
      self.convs_sep = nn.ModuleList()
      self.convs_1x1 = nn.ModuleList()
      self.norms_1 = nn.ModuleList()
      self.norms_2 = nn.ModuleList()
      for i in range(num_layers):
          dilation = kernel_size**i
          padding = (kernel_size * dilation - dilation) // 2
          self.convs_sep.append(
              nn.Conv1d(
                  channels,
                  channels,
                  kernel_size,
                  groups=channels,
                  dilation=dilation,
                  padding=padding,
              )
          )
          self.convs_1x1.append(nn.Conv1d(channels, channels, 1))
          self.norms_1.append(LayerNorm2(channels))
          self.norms_2.append(LayerNorm2(channels))
      self.dropout = nn.Dropout(dropout_p)
  
imports: import math
  import torch
  from torch import nn
  from torch.nn import functional
  from TTS.tts.layers.generic.normalization import LayerNorm2
  from TTS.tts.layers.vits.transforms import piecewise_rational_quadratic_transform
label_desc: Use image node_id 1 to create a new DilatedDepthSeparableConv object from inherited base classes: nn with example: obj = DilatedDepthSeparableConv(channels, kernel_size, num_layers, dropout_p)