code: def test_are_pipeline_tansformations_empty_exo(
      load_uni_exo_data_target_missing,
  ):
      """Tests _are_pipeline_tansformations_empty, _transformations_present_X, and
      _transformations_present_y WITH exogenous variables"""
      data, target = load_uni_exo_data_target_missing
      data_no_miss = data.copy()
      data_no_miss.fillna(10, inplace=True)
  
      exp = TSForecastingExperiment()
      FH = 12
  
      ###############################
      # 1: Not Empty Pipeline ####
      ###############################
  
      # 1A: Both y and X have missing values ----
      exp.setup(
          data=data,
          target=target,
          fh=FH,
          numeric_imputation_target="drift",
          numeric_imputation_exogenous="drift",
      )
      assert _transformations_present_X(pipeline=exp.pipeline)
      assert _transformations_present_y(pipeline=exp.pipeline)
      assert not _are_pipeline_tansformations_empty(
          pipeline=exp.pipeline
      )
  
      # 1B: Data has no missing values, but y impute step added ----
      # Even though data has no missing values, imputation step y is added as user has requested
      exp.setup(
          data=data_no_miss,
          target=target,
          fh=FH,
          numeric_imputation_target="drift",
      )
      assert not _transformations_present_X(pipeline=exp.pipeline)
      assert _transformations_present_y(pipeline=exp.pipeline)
      assert not _are_pipeline_tansformations_empty(
          pipeline=exp.pipeline
      )
  
      # 1C: Data has no missing values, but X impute step added ----
      # Even though data has no missing values, imputation step X is added as user has requested
      exp.setup(
          data=data_no_miss,
          target=target,
          fh=FH,
          numeric_imputation_exogenous="drift",
      )
      assert _transformations_present_X(pipeline=exp.pipeline)
      assert not _transformations_present_y(pipeline=exp.pipeline)
      assert not _are_pipeline_tansformations_empty(
          pipeline=exp.pipeline
      )
  
      ###########################
      # 2: Empty Pipeline ####
      ###########################
  
      # 2A: No Imputation in Pipeline ----
      exp.setup(data=data_no_miss, target=target, fh=FH)
      assert not _transformations_present_X(pipeline=exp.pipeline)
      assert not _transformations_present_y(pipeline=exp.pipeline)
      assert _are_pipeline_tansformations_empty(pipeline=exp.pipeline)
  
file_path: pycaret/tests/test_time_series_utils_forecasting_pipeline.py
imports: import numpy
  import pytest
  from sktime.forecasting.naive import NaiveForecaster
  from pycaret.time_series import TSForecastingExperiment
  from pycaret.utils.time_series.forecasting.models import DummyForecaster
  from pycaret.utils.time_series.forecasting.pipeline import _add_model_to_pipeline, _are_pipeline_tansformations_empty, _get_imputed_data, _transformations_present_X, _transformations_present_y
label_desc: Use image node_id 4 for calling a global function with example usage: test_are_pipeline_tansformations_empty_exo(load_uni_exo_data_target_missing) without return types