code: def test_build_seasonality_feature_df_with_changes(hourly_data):
      # test default parameters
      df = hourly_data["df"]
      df_seasonality = build_seasonality_feature_df_with_changes(
          df=df, time_col="ts"
      )
      assert df_seasonality.shape[0] == df.shape[0]
      assert df_seasonality.shape[1] == 22  # default value
      # test given parameters
      df_seasonality = build_seasonality_feature_df_with_changes(
          df=df,
          time_col="ts",
          changepoints_dict={"method": "uniform", "n_changepoints": 10},
      )
      assert df_seasonality.shape[0] == df.shape[0]
      assert df_seasonality.shape[1] == 22 * 11
      # test given parameters
      df_seasonality = build_seasonality_feature_df_with_changes(
          df=df,
          time_col="ts",
          changepoints_dict={"method": "uniform", "n_changepoints": 10},
          fs_components_df=pd.DataFrame(
              {
                  "name": ["conti_year"],
                  "period": [1.0],
                  "order": [8],
                  "seas_names": ["yearly"],
              }
          ),
      )
      assert df_seasonality.shape[0] == df.shape[0]
      assert df_seasonality.shape[1] == 16 * 11
      # test no change point
      df_seasonality = build_seasonality_feature_df_with_changes(
          df=df,
          time_col="ts",
          changepoints_dict={"method": "uniform", "n_changepoints": 0},
      )
      assert df_seasonality.shape[0] == df.shape[0]
      assert df_seasonality.shape[1] == 22
      # test result values
      df = pd.DataFrame(
          {
              "ts": [
                  dt(2020, 1, 1),
                  dt(2020, 1, 2),
                  dt(2020, 1, 3),
                  dt(2020, 1, 4),
                  dt(2020, 1, 5),
              ],
              "y": [1, 2, 3, 4, 5],
          }
      )
      df_seasonality = build_seasonality_feature_df_with_changes(
          df=df,
          time_col="ts",
          changepoints_dict={"method": "uniform", "n_changepoints": 1},
          fs_components_df=pd.DataFrame(
              {
                  "name": ["conti_year"],
                  "period": [1.0],
                  "order": [1],
                  "seas_names": ["yearly"],
              }
          ),
      )
      freq = 2 * np.pi / 366
      expected_df_seasonality = pd.DataFrame(
          {
              "sin1_conti_year_yearly": [
                  0,
                  np.sin(freq * 1),
                  np.sin(freq * 2),
                  np.sin(freq * 3),
                  np.sin(freq * 4),
              ],
              "cos1_conti_year_yearly": [
                  1,
                  np.cos(freq * 1),
                  np.cos(freq * 2),
                  np.cos(freq * 3),
                  np.cos(freq * 4),
              ],
              "sin1_conti_year_yearly_2020_01_03_00": [
                  0,
                  0,
                  np.sin(freq * 2),
                  np.sin(freq * 3),
                  np.sin(freq * 4),
              ],
              "cos1_conti_year_yearly_2020_01_03_00": [
                  0,
                  0,
                  np.cos(freq * 2),
                  np.cos(freq * 3),
                  np.cos(freq * 4),
              ],
          },
          index=[
              dt(2020, 1, 1),
              dt(2020, 1, 2),
              dt(2020, 1, 3),
              dt(2020, 1, 4),
              dt(2020, 1, 5),
          ],
      )
      pd.testing.assert_frame_equal(
          df_seasonality, expected_df_seasonality, check_names=False
      )
  
imports: from datetime import datetime
  import numpy
  import pandas
  import pytest
  from greykite.algo.changepoint.adalasso.changepoints_utils import adaptive_lasso_cv
  from greykite.algo.changepoint.adalasso.changepoints_utils import build_seasonality_feature_df_from_detection_result
  from greykite.algo.changepoint.adalasso.changepoints_utils import build_seasonality_feature_df_with_changes
  from greykite.algo.changepoint.adalasso.changepoints_utils import build_trend_feature_df_with_changes
  from greykite.algo.changepoint.adalasso.changepoints_utils import check_freq_unit_at_most_day
  from greykite.algo.changepoint.adalasso.changepoints_utils import combine_detected_and_custom_trend_changepoints
  from greykite.algo.changepoint.adalasso.changepoints_utils import compute_fitted_components
  from greykite.algo.changepoint.adalasso.changepoints_utils import compute_min_changepoint_index_distance
  from greykite.algo.changepoint.adalasso.changepoints_utils import estimate_seasonality_with_detected_changepoints
  from greykite.algo.changepoint.adalasso.changepoints_utils import estimate_trend_with_detected_changepoints
  from greykite.algo.changepoint.adalasso.changepoints_utils import filter_changepoints
  from greykite.algo.changepoint.adalasso.changepoints_utils import find_neighbor_changepoints
  from greykite.algo.changepoint.adalasso.changepoints_utils import get_changes_from_beta
  from greykite.algo.changepoint.adalasso.changepoints_utils import get_seasonality_changepoint_df_cols
  from greykite.algo.changepoint.adalasso.changepoints_utils import get_seasonality_changes_from_adaptive_lasso
  from greykite.algo.changepoint.adalasso.changepoints_utils import get_trend_changepoint_dates_from_cols
  from greykite.algo.changepoint.adalasso.changepoints_utils import get_trend_changes_from_adaptive_lasso
  from greykite.algo.changepoint.adalasso.changepoints_utils import get_yearly_seasonality_changepoint_dates_from_freq
  from greykite.algo.changepoint.adalasso.changepoints_utils import plot_change
  from greykite.common.testing_utils import generate_df_for_tests
label_desc: Use image node_id 4 for calling a global function with example usage: test_build_seasonality_feature_df_with_changes(hourly_data) without return types