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 _NBEATSModule(
          input_dim=input_dim,
          output_dim=output_dim,
          nr_params=nr_params,
          generic_architecture=self.generic_architecture,
          num_stacks=self.num_stacks,
          num_blocks=self.num_blocks,
          num_layers=self.num_layers,
          layer_widths=self.layer_widths,
          expansion_coefficient_dim=self.expansion_coefficient_dim,
          trend_polynomial_degree=self.trend_polynomial_degree,
          batch_norm=self.batch_norm,
          dropout=self.dropout,
          activation=self.activation,
          **self.pl_module_params,
      )
  
imports: from enum import Enum
  from typing import List, NewType, Tuple, Union
  import numpy
  import torch
  import torch.nn
  from darts.logging import get_logger, raise_if_not, raise_log
  from darts.models.forecasting.pl_forecasting_module import PLPastCovariatesModule, io_processor
  from darts.models.forecasting.torch_forecasting_model import PastCovariatesTorchModel
  from darts.utils.torch import MonteCarloDropout
label_desc: Use image node_id 3 for calling the NBEATSModel obj's underlying member method code with example usage: obj._create_model(train_sample) and returns: _NBEATSModule