docstr: Calculate forward propagation.
  Args:
      c (Tensor): Local conditioning auxiliary features (B, C ,T').
  Returns:
      Tensor: Output tensor (B, out_channels, T)
docstr_tok: ["Calculate","forward","propagation",".","Args",":","c","(","Tensor",")",":","Local","conditioning","auxiliary","features","(","B",",","C",",","T","'",")",".","Returns",":","Tensor",":","Output","tensor","(","B",",","out_channels",",","T",")"]
code: def forward(self, c):
      """Calculate forward propagation.
      Args:
          c (Tensor): Local conditioning auxiliary features (B, C ,T').
      Returns:
          Tensor: Output tensor (B, out_channels, T)
      """
      # random noise
      x = torch.randn([c.shape[0], self.in_channels, c.shape[2]])
      x = x.to(self.first_conv.bias.device)
      x = self.first_conv(x)
  
      for n in range(self.lvc_block_nums):
          x = self.lvc_blocks[n](x, c)
  
      # apply final layers
      for f in self.last_conv_layers:
          x = F.leaky_relu(x, LRELU_SLOPE)
          x = f(x)
      x = torch.tanh(x)
      return x
  
file_path: TTS/TTS/vocoder/models/univnet_generator.py
imports: from typing import List
  import numpy
  import torch
  import torch.nn.functional
  from torch.nn.utils import parametrize
  from TTS.vocoder.layers.lvc_block import LVCBlock
label_desc: Use image node_id 2 for calling the UnivnetGenerator obj's underlying member method code with example usage: obj.forward(c) and returns: x