code: def test_get_feature_sets_enabled():
      """Tests get_feature_sets_enabled"""
      silverkite = SimpleSilverkiteForecast()
  
      # daily data, 1+ years
      feature_sets_enabled = silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
          simple_freq=SimpleTimeFrequencyEnum.DAY.name,
          num_days=1000,
          feature_sets_enabled="auto",
      )
      expected = {
          SilverkiteColumn.COLS_HOUR_OF_WEEK: False,
          SilverkiteColumn.COLS_WEEKEND_SEAS: False,
          SilverkiteColumn.COLS_DAY_OF_WEEK_SEAS: False,
          SilverkiteColumn.COLS_TREND_DAILY_SEAS: False,
          SilverkiteColumn.COLS_EVENT_SEAS: False,
          SilverkiteColumn.COLS_EVENT_WEEKEND_SEAS: False,
          SilverkiteColumn.COLS_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKEND: True,
          SilverkiteColumn.COLS_TREND_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKLY_SEAS: True,
      }
      assert feature_sets_enabled == expected
  
      # daily data, less than 1 quarter
      feature_sets_enabled = silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
          simple_freq=SimpleTimeFrequencyEnum.DAY.name,
          num_days=40,
          feature_sets_enabled="auto",
      )
      expected = {
          SilverkiteColumn.COLS_HOUR_OF_WEEK: False,
          SilverkiteColumn.COLS_WEEKEND_SEAS: False,
          SilverkiteColumn.COLS_DAY_OF_WEEK_SEAS: False,
          SilverkiteColumn.COLS_TREND_DAILY_SEAS: False,
          SilverkiteColumn.COLS_EVENT_SEAS: False,
          SilverkiteColumn.COLS_EVENT_WEEKEND_SEAS: False,
          SilverkiteColumn.COLS_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKEND: True,
          SilverkiteColumn.COLS_TREND_DAY_OF_WEEK: False,
          SilverkiteColumn.COLS_TREND_WEEKLY_SEAS: False,
      }
      assert feature_sets_enabled == expected
  
      # hourly data, 3+ years
      feature_sets_enabled = silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
          simple_freq=SimpleTimeFrequencyEnum.HOUR.name,
          num_days=2000,
          feature_sets_enabled="auto",
      )
      expected = {
          SilverkiteColumn.COLS_HOUR_OF_WEEK: True,
          SilverkiteColumn.COLS_WEEKEND_SEAS: True,
          SilverkiteColumn.COLS_DAY_OF_WEEK_SEAS: True,
          SilverkiteColumn.COLS_TREND_DAILY_SEAS: True,
          SilverkiteColumn.COLS_EVENT_SEAS: False,
          SilverkiteColumn.COLS_EVENT_WEEKEND_SEAS: True,
          SilverkiteColumn.COLS_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKEND: True,
          SilverkiteColumn.COLS_TREND_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKLY_SEAS: True,
      }
      assert feature_sets_enabled == expected
  
      # hourly data, less than 1 year
      feature_sets_enabled = silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
          simple_freq=SimpleTimeFrequencyEnum.HOUR.name,
          num_days=101,
          feature_sets_enabled="auto",
      )
      expected = {
          SilverkiteColumn.COLS_HOUR_OF_WEEK: True,
          SilverkiteColumn.COLS_WEEKEND_SEAS: True,
          SilverkiteColumn.COLS_DAY_OF_WEEK_SEAS: True,
          SilverkiteColumn.COLS_TREND_DAILY_SEAS: True,
          SilverkiteColumn.COLS_EVENT_SEAS: True,
          SilverkiteColumn.COLS_EVENT_WEEKEND_SEAS: False,
          SilverkiteColumn.COLS_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKEND: True,
          SilverkiteColumn.COLS_TREND_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKLY_SEAS: False,
      }
      assert feature_sets_enabled == expected
  
      # checks if `feature_sets_enabled` can be used to override settings
      feature_sets_enabled = silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
          simple_freq=SimpleTimeFrequencyEnum.HOUR.name,
          num_days=101,
          feature_sets_enabled={
              SilverkiteColumn.COLS_DAY_OF_WEEK_SEAS: "auto",
              SilverkiteColumn.COLS_EVENT_SEAS: False,
              SilverkiteColumn.COLS_EVENT_WEEKEND_SEAS: True,
              SilverkiteColumn.COLS_TREND_WEEKEND: None,
              SilverkiteColumn.COLS_TREND_WEEKLY_SEAS: "auto",
          },
      )
      expected = {
          SilverkiteColumn.COLS_HOUR_OF_WEEK: True,
          SilverkiteColumn.COLS_WEEKEND_SEAS: True,
          SilverkiteColumn.COLS_DAY_OF_WEEK_SEAS: True,
          SilverkiteColumn.COLS_TREND_DAILY_SEAS: True,
          SilverkiteColumn.COLS_EVENT_SEAS: False,  # updated
          SilverkiteColumn.COLS_EVENT_WEEKEND_SEAS: True,  # updated
          SilverkiteColumn.COLS_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKEND: False,  # updated
          SilverkiteColumn.COLS_TREND_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKLY_SEAS: False,
      }
      assert feature_sets_enabled == expected
  
      # weekly data
      feature_sets_enabled = silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
          simple_freq=SimpleTimeFrequencyEnum.WEEK.name,
          num_days=60,
          feature_sets_enabled="auto",
      )
      expected = {
          SilverkiteColumn.COLS_HOUR_OF_WEEK: False,
          SilverkiteColumn.COLS_WEEKEND_SEAS: False,
          SilverkiteColumn.COLS_DAY_OF_WEEK_SEAS: False,
          SilverkiteColumn.COLS_TREND_DAILY_SEAS: False,
          SilverkiteColumn.COLS_EVENT_SEAS: False,
          SilverkiteColumn.COLS_EVENT_WEEKEND_SEAS: False,
          SilverkiteColumn.COLS_DAY_OF_WEEK: False,
          SilverkiteColumn.COLS_TREND_WEEKEND: False,
          SilverkiteColumn.COLS_TREND_DAY_OF_WEEK: False,
          SilverkiteColumn.COLS_TREND_WEEKLY_SEAS: False,
      }
      assert feature_sets_enabled == expected
  
      # feature_sets_enabled=False
      feature_sets_enabled = silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
          simple_freq=SimpleTimeFrequencyEnum.HOUR.name,
          num_days=101,
          feature_sets_enabled=False,
      )
      assert feature_sets_enabled == expected
      # feature_sets_enabled=None
      feature_sets_enabled = silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
          simple_freq=SimpleTimeFrequencyEnum.HOUR.name,
          num_days=101,
          feature_sets_enabled=None,
      )
      assert feature_sets_enabled == expected
      # feature_sets_enabled=True
      feature_sets_enabled = silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
          simple_freq=SimpleTimeFrequencyEnum.HOUR.name,
          num_days=101,
          feature_sets_enabled=True,
      )
      assert feature_sets_enabled == {
          SilverkiteColumn.COLS_HOUR_OF_WEEK: True,
          SilverkiteColumn.COLS_WEEKEND_SEAS: True,
          SilverkiteColumn.COLS_DAY_OF_WEEK_SEAS: True,
          SilverkiteColumn.COLS_TREND_DAILY_SEAS: True,
          SilverkiteColumn.COLS_EVENT_SEAS: True,
          SilverkiteColumn.COLS_EVENT_WEEKEND_SEAS: True,
          SilverkiteColumn.COLS_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKEND: True,
          SilverkiteColumn.COLS_TREND_DAY_OF_WEEK: True,
          SilverkiteColumn.COLS_TREND_WEEKLY_SEAS: True,
      }
  
      # Checks exceptions
      with pytest.raises(
          ValueError,
          match="Unrecognized feature set: 'unknown_feature_set'",
      ):
          silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
              simple_freq=SimpleTimeFrequencyEnum.HOUR.name,
              num_days=101,
              feature_sets_enabled={"unknown_feature_set": True},
          )
      with pytest.raises(
          ValueError,
          match=f"Unrecognized `feature_sets_enabled` dictionary value for key {SilverkiteColumn.COLS_TREND_WEEKLY_SEAS}: "
          f"expected bool or 'auto' or None. Found: off",
      ):
          silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
              simple_freq=SimpleTimeFrequencyEnum.HOUR.name,
              num_days=101,
              feature_sets_enabled={
                  SilverkiteColumn.COLS_TREND_WEEKLY_SEAS: "off"
              },
          )
      with pytest.raises(
          ValueError,
          match="Unrecognized type for `feature_sets_enabled`: expected bool, dict, 'auto', or None. Found: on",
      ):
          silverkite._SimpleSilverkiteForecast__get_feature_sets_enabled(
              simple_freq=SimpleTimeFrequencyEnum.HOUR.name,
              num_days=101,
              feature_sets_enabled="on",
          )
  
imports: import datetime
  import math
  import sys
  import warnings
  from datetime import timedelta
  import pandas
  import pytest
  from testfixtures import LogCapture
  import greykite.common.constants
  from greykite.algo.changepoint.adalasso.changepoint_detector import ChangepointDetector
  from greykite.algo.forecast.silverkite.constants.silverkite_column import SilverkiteColumn
  from greykite.algo.forecast.silverkite.constants.silverkite_holiday import SilverkiteHoliday
  from greykite.algo.forecast.silverkite.constants.silverkite_seasonality import SilverkiteSeasonality
  from greykite.algo.forecast.silverkite.constants.silverkite_seasonality import SilverkiteSeasonalityEnum
  from greykite.algo.forecast.silverkite.forecast_simple_silverkite import SimpleSilverkiteForecast
  from greykite.algo.forecast.silverkite.forecast_simple_silverkite_helper import generate_holiday_events
  from greykite.common.constants import CHANGEPOINT_COL_PREFIX
  from greykite.common.constants import EVENT_DF_DATE_COL
  from greykite.common.constants import EVENT_DF_LABEL_COL
  from greykite.common.constants import LOGGER_NAME
  from greykite.common.constants import TIME_COL
  from greykite.common.constants import VALUE_COL
  from greykite.common.data_loader import DataLoader
  from greykite.common.enums import SimpleTimeFrequencyEnum
  from greykite.common.enums import TimeEnum
  from greykite.common.features.timeseries_features import get_available_holidays_across_countries
  from greykite.common.features.timeseries_features import get_holidays
  from greykite.common.python_utils import assert_equal
  from greykite.common.python_utils import update_dictionary
  from greykite.common.testing_utils import generate_df_for_tests
  from greykite.common.testing_utils import generate_df_with_reg_for_tests
label_desc: Use image node_id 16 for calling a global function with example usage: test_get_feature_sets_enabled() without return types