class_docstr: Dilated depth-separable conv module.
class_docstr_tok: ["Dilated","depth-separable","conv","module","."]
docstr: Calculate forward propagation.
  
  Args:
      x (Tensor): Input tensor (B, in_channels, T).
      x_mask (Tensor): Mask tensor (B, 1, T).
      g (Optional[Tensor]): Global conditioning tensor (B, global_channels, 1).
  
  Returns:
      Tensor: Output tensor (B, channels, T).
docstr_tok: ["Calculate","forward","propagation",".","Args",":","x","(","Tensor",")",":","Input","tensor","(","B",",","in_channels",",","T",")",".","x_mask","(","Tensor",")",":","Mask","tensor","(","B",",","1",",","T",")",".","g","(","Optional","[","Tensor","]",")",":","Global","conditioning","tensor","(","B",",","global_channels",",","1",")",".","Returns",":","Tensor",":","Output","tensor","(","B",",","channels",",","T",")","."]
code: def forward(
      self,
      x: torch.Tensor,
      x_mask: torch.Tensor,
      g: Optional[torch.Tensor] = None,
  ) -> torch.Tensor:
      """Calculate forward propagation.
  
      Args:
          x (Tensor): Input tensor (B, in_channels, T).
          x_mask (Tensor): Mask tensor (B, 1, T).
          g (Optional[Tensor]): Global conditioning tensor (B, global_channels, 1).
  
      Returns:
          Tensor: Output tensor (B, channels, T).
  
      """
      if g is not None:
          x = x + g
      for f in self.convs:
          y = f(x * x_mask)
          x = x + y
      return x * x_mask
  
imports: import math
  from typing import Optional, Tuple, Union
  import torch
  from espnet2.gan_tts.vits.transform import piecewise_rational_quadratic_transform
label_desc: Use image node_id 2 for calling the DilatedDepthSeparableConv obj's underlying member method code with example usage: obj.forward(x, x_mask, g) and returns: unknown