code: def _create_model(
      self, train_sample: Tuple[torch.Tensor]
  ) -> torch.nn.Module:
      # samples are made of (past_target, past_covariates, future_target)
      input_dim = train_sample[0].shape[1] + (
          train_sample[1].shape[1] if train_sample[1] is not None else 0
      )
      output_dim = train_sample[-1].shape[1]
      nr_params = (
          1
          if self.likelihood is None
          else self.likelihood.num_parameters
      )
  
      return _TCNModule(
          input_size=input_dim,
          target_size=output_dim,
          nr_params=nr_params,
          kernel_size=self.kernel_size,
          num_filters=self.num_filters,
          num_layers=self.num_layers,
          dilation_base=self.dilation_base,
          target_length=self.output_chunk_length,
          dropout=self.dropout,
          weight_norm=self.weight_norm,
          **self.pl_module_params,
      )
  
imports: import math
  from typing import Optional, Sequence, Tuple
  import torch
  import torch.nn
  import torch.nn.functional
  from darts.logging import get_logger, raise_if_not
  from darts.models.forecasting.pl_forecasting_module import PLPastCovariatesModule, io_processor
  from darts.models.forecasting.torch_forecasting_model import PastCovariatesTorchModel
  from darts.timeseries import TimeSeries
  from darts.utils.data import PastCovariatesShiftedDataset
  from darts.utils.torch import MonteCarloDropout
label_desc: Use image node_id 3 for calling the TCNModel obj's underlying member method code with example usage: obj._create_model(train_sample) and returns: _TCNModule