class_docstr: Distributional Temporal Convolutional Network: a TCN to learn a time-
  varying distribution.
  
  Composed of a sequence of causal convolution blocks.
  
  Takes as input a three-dimensional tensor (`B`, `C`, `L`) where `B` is the
  batch size, `C` is the number of input channels, and `L` is the length of
  the input. Outputs a three-dimensional tensor (`B`, `C_out`, `L`).
  
  Args:
      in_channels : Number of input channels, typically the dimensionality of the time series
      out_channels : Number of output channels, typically the number of parameters in the time series distribution
      kernel_size : Kernel size of the applied non-residual convolutions.
      channels : Number of channels processed in the network and of output channels,
              typically equal to out_channels for simplicity, expand for better performance.
      layers : Depth of the network.
      bias : If True, adds a learnable bias to the convolutions.
      fwd_time : If True the network is the relation relation if from past to future (forward),
              if False, the relation from future to past (backward).
      output_distr: Distribution whose parameters will be specified by the network output
code: def forward(self, x):
      net_out = self.network(x)
      net_out_final = net_out[..., -1].squeeze()
      self.output_distr(net_out_final)
  
      return self.output_distr
  
imports: import torch
  import torch.nn
  from .tcn import TCNBlock
  from torch.distributions.normal import Normal
label_desc: Use image node_id 2 for calling the DistributionalTCN obj's underlying member method code with example usage: obj.forward(x) and returns: self