code: def test_torch_auto_start_with_future_cov(self, model_config):
      forecast_hrz = 10
      # Future covariates only
      for model_cls, kwargs, bounds, type in models_torch_cls_kwargs:
          # todo case of DualCovariates (RNN)
          if type == "PastCovariates" or type == "DualCovariates":
              return
  
          model = model_cls(
              random_state=0,
              **kwargs,
          )
          model.fit(
              self.ts_pass_train,
              future_covariates=self.ts_fut_cov_train,
          )
  
          # Only fut covariate
          forecasts = model.historical_forecasts(
              series=[self.ts_pass_val, self.ts_pass_val],
              future_covariates=[
                  self.ts_fut_cov_valid_7_aft_start,
                  self.ts_fut_cov_valid_16_bef_start,
              ],
              forecast_horizon=forecast_hrz,
              stride=1,
              retrain=True,
              overlap_end=False,
          )
  
          assert (
              len(forecasts) == 2
          ), f"Model {model_cls} did not return a list of historical forecasts"
          theorical_forecast_length = (
              self.ts_val_length
              - (bounds[0] + bounds[1])  # train sample length
              - (
                  forecast_hrz - 1
              )  # (horizon - 1): if entire horizon is available, we can predict 1,
              - 7  # future covs start 7 after target (more than past covs) -> shift
              - 2  # future covs in output chunk -> difference between horizon=10 and output_chunk_length=12
          )
          assert len(forecasts[0]) == theorical_forecast_length, (
              f"Model {model_cls} does not return the right number of historical forecasts in case "
              f"of retrain=True and overlap_end=False and no past_covariates and future_covariates "
              f"with different start. "
              f"Expected {theorical_forecast_length}, got {len(forecasts[0])}"
          )
          theorical_forecast_length = (
              self.ts_val_length
              - (bounds[0] + bounds[1])  # train sample length
              - (
                  forecast_hrz - 1
              )  # if entire horizon is available, we can predict 1
              - 0  # all covs start at the same time as target -> no shift
              - 2  # future covs in output chunk -> difference between horizon=10 and output_chunk_length=12
          )
          assert len(forecasts[1]) == theorical_forecast_length, (
              f"Model {model_cls} does not return the right number of historical forecasts in case "
              f"of retrain=True and overlap_end=False and no past_covariates and future_covariates "
              f"with different start. "
              f"Expected {theorical_forecast_length}, got {len(forecasts[1])}"
          )
  
imports: import itertools
  from itertools import product
  import numpy
  import pandas
  import pytest
  import darts
  from darts import TimeSeries, concatenate
  from darts.dataprocessing.transformers import Scaler
  from darts.datasets import AirPassengersDataset
  from darts.logging import get_logger
  from darts.models import ARIMA, AutoARIMA, CatBoostModel, LightGBMModel, LinearRegressionModel, NaiveSeasonal, NotImportedModule
  from darts.tests.conftest import tfm_kwargs
  from darts.utils import timeseries_generation
label_desc: Use image node_id 20 for calling the TestHistoricalforecast obj's underlying member method code with example usage: obj.test_torch_auto_start_with_future_cov(model_config) without return types