class_docstr: This is the WaveNet like layer for the affine coupling.  The primary difference
  from WaveNet is the convolutions need not be causal.  There is also no dilation
  size reset.  The dilation only doubles on each layer
class_docstr_tok: ["This","is","the","WaveNet","like","layer","for","the","affine","coupling",".","The","primary","difference","from","WaveNet","is","the","convolutions","need","not","be","causal",".","There","is","also","no","dilation","size","reset",".","The","dilation","only","doubles","on","each","layer"]
code: def forward(self, forward_input):
      audio, spect = forward_input
      audio = self.start(audio)
      output = torch.zeros_like(audio)
      n_channels_tensor = torch.IntTensor([self.n_channels])
  
      spect = self.cond_layer(spect)
  
      for i in range(self.n_layers):
          spect_offset = i * 2 * self.n_channels
          acts = fused_add_tanh_sigmoid_multiply(
              self.in_layers[i](audio),
              spect[
                  :,
                  spect_offset : spect_offset + 2 * self.n_channels,
                  :,
              ],
              n_channels_tensor,
          )
  
          res_skip_acts = self.res_skip_layers[i](acts)
          if i < self.n_layers - 1:
              audio = audio + res_skip_acts[:, : self.n_channels, :]
              output = output + res_skip_acts[:, self.n_channels :, :]
          else:
              output = output + res_skip_acts
  
      return self.end(output)
  
imports: import copy
  import torch
  from torch.autograd import Variable
  import torch.nn.functional
label_desc: Use image node_id 2 for calling the WN obj's underlying member method code with example usage: obj.forward(forward_input) and returns: self