code: def test_fs_components_df(hourly_data):
      """Tests ``convert_simple_silverkite_params`` fs_components_df output"""
      silverkite = SimpleSilverkiteForecast()
      time_properties = {
          "ts": None,
          "period": TimeEnum.ONE_HOUR_IN_SECONDS.value,
          "simple_freq": SimpleTimeFrequencyEnum.HOUR,
          "num_training_points": hourly_data.shape[0],
          "num_training_days": math.floor(hourly_data.shape[0] / 24),
          "start_year": 2018,
          "end_year": 2019,
          "origin_for_time_vars": 2018.12,
      }
  
      seasonality = {
          "yearly_seasonality": "auto",
          "quarterly_seasonality": "auto",
          "monthly_seasonality": "auto",
          "weekly_seasonality": "auto",
          "daily_seasonality": "auto",
      }
      expected = silverkite._SimpleSilverkiteForecast__get_silverkite_seasonality(
          simple_freq=time_properties["simple_freq"].name,
          num_days=time_properties["num_training_days"],
          seasonality=seasonality,
      )
  
      silverkite = SimpleSilverkiteForecast()
      parameters = silverkite.convert_params(
          df=hourly_data,
          time_col=cst.TIME_COL,
          value_col=cst.VALUE_COL,
          time_properties=time_properties,
          yearly_seasonality=seasonality["yearly_seasonality"],
          quarterly_seasonality=seasonality["quarterly_seasonality"],
          monthly_seasonality=seasonality["monthly_seasonality"],
          weekly_seasonality=seasonality["weekly_seasonality"],
          daily_seasonality=seasonality["daily_seasonality"],
      )
      assert_equal(parameters["fs_components_df"], expected)
  
      seasonality = {
          "yearly_seasonality": True,
          "quarterly_seasonality": False,
          "monthly_seasonality": 10,
          "weekly_seasonality": 2,
          "daily_seasonality": False,
      }
      expected = silverkite._SimpleSilverkiteForecast__get_silverkite_seasonality(
          simple_freq=time_properties["simple_freq"].name,
          num_days=time_properties["num_training_days"],
          seasonality=seasonality,
      )
      parameters = silverkite.convert_params(
          df=hourly_data,
          time_col=cst.TIME_COL,
          value_col=cst.VALUE_COL,
          time_properties=time_properties,
          yearly_seasonality=seasonality["yearly_seasonality"],
          quarterly_seasonality=seasonality["quarterly_seasonality"],
          monthly_seasonality=seasonality["monthly_seasonality"],
          weekly_seasonality=seasonality["weekly_seasonality"],
          daily_seasonality=seasonality["daily_seasonality"],
      )
      assert_equal(parameters["fs_components_df"], expected)
  
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 6 for calling a global function with example usage: test_fs_components_df(hourly_data) without return types