code: def test_ensemble_models_denoising_multi_input(self):
      # for every model, test whether it correctly denoises ts_sum_2 using ts_random_multi and ts_sum_2 as inputs
      # WARNING: this test isn't numerically stable, changing self.RANDOM_SEED can lead to exploding coefficients
      horizon = 10
      _, _, ts_sum2, ts_cov2 = self.denoising_input()
      torch.manual_seed(self.RANDOM_SEED)
  
      ensemble_models = [
          RNNModel(
              input_chunk_length=20,
              output_chunk_length=horizon,
              n_epochs=1,
              random_state=self.RANDOM_SEED,
              **tfm_kwargs,
          ),
          BlockRNNModel(
              input_chunk_length=20,
              output_chunk_length=horizon,
              n_epochs=1,
              random_state=self.RANDOM_SEED,
              **tfm_kwargs,
          ),
          RegressionModel(lags_past_covariates=[-1]),
          RegressionModel(lags_past_covariates=[-1]),
      ]
  
      ensemble = RegressionEnsembleModel(ensemble_models, horizon)
      self.helper_test_models_accuracy(
          ensemble, horizon, ts_sum2, ts_cov2, 3
      )
  
imports: from typing import List, Union
  import numpy
  import pandas
  import pytest
  from sklearn.ensemble import RandomForestRegressor
  from sklearn.linear_model import LinearRegression
  from darts import TimeSeries
  from darts.logging import get_logger
  from darts.metrics import mape, rmse
  from darts.models import LinearRegressionModel, NaiveDrift, NaiveSeasonal, RandomForest, RegressionEnsembleModel, RegressionModel, Theta
  from darts.tests.conftest import tfm_kwargs
  from darts.tests.models.forecasting.test_ensemble_models import _make_ts
  from darts.tests.models.forecasting.test_regression_models import train_test_split
  from darts.utils import timeseries_generation
label_desc: Use image node_id 19 for calling the TestRegressionEnsembleModels obj's underlying member method code with example usage: obj.test_ensemble_models_denoising_multi_input() without return types