code: def _build_train_dataset(
      self,
      target: Sequence[TimeSeries],
      past_covariates: Optional[Sequence[TimeSeries]],
      future_covariates: Optional[Sequence[TimeSeries]],
      max_samples_per_ts: Optional[int],
  ) -> DualCovariatesShiftedDataset:
      return DualCovariatesShiftedDataset(
          target_series=target,
          covariates=future_covariates,
          length=self.training_length,
          shift=1,
          max_samples_per_ts=max_samples_per_ts,
          use_static_covariates=self.uses_static_covariates,
      )
  
imports: import inspect
  from abc import ABC, abstractmethod
  from typing import Optional, Sequence, Tuple, Type, Union
  import torch
  import torch.nn
  from darts.logging import get_logger, raise_if_not, raise_log
  from darts.models.forecasting.pl_forecasting_module import PLDualCovariatesModule, io_processor
  from darts.models.forecasting.torch_forecasting_model import DualCovariatesTorchModel
  from darts.timeseries import TimeSeries
  from darts.utils.data import DualCovariatesShiftedDataset, TrainingDataset
label_desc: Use image node_id 3 for calling the RNNModel obj's underlying member method code with example usage: obj._build_train_dataset(target, past_covariates, future_covariates, max_samples_per_ts) and returns: DualCovariatesShiftedDataset