docstr: Returns TimeSeries objects that can be used for testing impact of categorical covariates.
  
  Details:
  - series is a univariate TimeSeries with daily frequency.
  - future_covariates are a TimeSeries with 2 components. The first component represents a "promotion"
      mechanism and has an impact on the target quantiy according to 'apply_promo_mechanism'. The second
      component contains random data that should have no impact on the target quantity. Note that altough the
      intention is to model the "promotion_mechnism" as a categorical variable, it is encoded as integers.
      This is required by LightGBM.
  - past_covariates are a TimeSeries with 2 components. It only contains dummy data and does not
      have any impact on the target series.
code: def inputs_for_tests_categorical_covariates(self):
      """
      Returns TimeSeries objects that can be used for testing impact of categorical covariates.
  
      Details:
      - series is a univariate TimeSeries with daily frequency.
      - future_covariates are a TimeSeries with 2 components. The first component represents a "promotion"
          mechanism and has an impact on the target quantiy according to 'apply_promo_mechanism'. The second
          component contains random data that should have no impact on the target quantity. Note that altough the
          intention is to model the "promotion_mechnism" as a categorical variable, it is encoded as integers.
          This is required by LightGBM.
      - past_covariates are a TimeSeries with 2 components. It only contains dummy data and does not
          have any impact on the target series.
      """
  
      def _apply_promo_mechanism(promo_mechanism):
          if promo_mechanism == 0:
              return 0
          elif promo_mechanism == 1:
              return np.random.normal(25, 5)
          elif promo_mechanism == 2:
              return np.random.normal(5, 1)
          elif promo_mechanism == 3:
              return np.random.normal(6, 2)
          elif promo_mechanism == 4:
              return np.random.normal(50, 5)
          elif promo_mechanism == 5:
              return np.random.normal(2, 0.5)
          elif promo_mechanism == 6:
              return np.random.normal(-10, 3)
          elif promo_mechanism == 7:
              return np.random.normal(15, 3)
          elif promo_mechanism == 8:
              return np.random.normal(40, 7)
          elif promo_mechanism == 9:
              return 0
          elif promo_mechanism == 10:
              return np.random.normal(20, 3)
  
      date_range = pd.date_range(
          start="2020-01-01", end="2023-01-01", freq="D"
      )
      df = (
          pd.DataFrame(
              {
                  "date": date_range,
                  "baseline": np.random.normal(
                      100, 10, len(date_range)
                  ),
                  "fut_cov_promo_mechanism": np.random.randint(
                      0, 11, len(date_range)
                  ),
                  "fut_cov_dummy": np.random.normal(
                      10, 2, len(date_range)
                  ),
                  "past_cov_dummy": np.random.normal(
                      10, 2, len(date_range)
                  ),
                  "past_cov_cat_dummy": np.random.normal(
                      10, 2, len(date_range)
                  ),
              }
          )
          .assign(
              target_qty=lambda _df: _df.baseline
              + _df.fut_cov_promo_mechanism.apply(
                  _apply_promo_mechanism
              )
          )
          .drop(columns=["baseline"])
      )
  
      series = TimeSeries.from_dataframe(
          df,
          time_col="date",
          value_cols=["target_qty"],
          static_covariates=pd.DataFrame({"product_id": [1]}),
      )
      past_covariates = TimeSeries.from_dataframe(
          df,
          time_col="date",
          value_cols=["past_cov_dummy", "past_cov_cat_dummy"],
      )
      future_covariates = TimeSeries.from_dataframe(
          df,
          time_col="date",
          value_cols=["fut_cov_promo_mechanism", "fut_cov_dummy"],
      )
  
      return series, past_covariates, future_covariates
  
imports: import copy
  import functools
  import itertools
  import math
  from unittest.mock import patch
  import numpy
  import pandas
  import pytest
  from sklearn.ensemble import HistGradientBoostingRegressor, RandomForestRegressor
  from sklearn.linear_model import LinearRegression
  import darts
  from darts import TimeSeries
  from darts.dataprocessing.encoders import FutureCyclicEncoder, PastDatetimeAttributeEncoder
  from darts.logging import get_logger
  from darts.metrics import mae, rmse
  from darts.models import CatBoostModel, LightGBMModel, LinearRegressionModel, NotImportedModule, RandomForest, RegressionModel, XGBModel
  from darts.utils import timeseries_generation
  from darts.utils.multioutput import MultiOutputRegressor
label_desc: Use image node_id 1 for calling the TestRegressionModels obj's underlying member method code with example usage: obj.inputs_for_tests_categorical_covariates() and returns: series,  past_covariates,  future_covariates, int, np, np, np, np, np, np, np, np, int, np