def METHOD_NAME(
    self,
    size: Optional[int] = 90 * 24,  # 90 days worth of data
    start_date: Optional[str] = "2018-01-01",
    hourly_seasonality: float = 1.0,
    hourly_seasonality_params: Optional[List[Tuple[float, float]]] = None,
    trend_params: Optional[List[TrendParams]] = None,
    weekday_dummy_params: Optional[List[float]] = None,
    annual_seasonality_params: Optional[List[Tuple[float, float]]] = None,
    holiday_alpha: float = 3.5,
    outlier_alpha: float = 2.5,
    noise_scale: float = 1.0,
) -> pd.DataFrame:
    """Generate a time series as a pandas dataframe.
    Keyword Args:
        size: The number of days in the time series.
        start_date: The start date of the time series.
        trend_params: A list of trend parameters corresponding to cutpoints in the time series.
        weekday_dummy_params: A list of weekday dummy parameters. Should be a list of length 7, with each day corresponding to the average difference in the time series on that day.
        annual_seasonality_params: A list of annual seasonality parameters used to create a cyclic component in the time series.
        holiday_alpha: The alpha parameter for the pareto distribution used to generate holiday effects.
        outlier_alpha: The alpha parameter for the pareto distribution used to generate outlier effects.
        noise_scale: The scale parameter for the standard deviation of the normal distribution used to generate noise.
    Returns:
        A pandas dataframe with a date column and a time series column.
    Notes:
        * Holiday and outlier effects are generated using a pareto distribution. The alpha parameter controls the shape of the distribution. A higher alpha value will result in more extreme holiday and outlier effects.
        * Holidays don't correspond to actual holidays. Instead, they are generated by randomly selecting days in the time series.
        * Annual seasonality is generated by Fourier series. The number of fourier terms is determined by the length of the annual_seasonality_params list. The first element of each tuple in the list is the amplitude of the sine term, and the second element is the amplitude of the cosine term.
    """
    return pd.DataFrame(
        {
            "ds": pd.date_range(start_date, periods=size, freq="60min"),
            "y": self._generate_hourly_time_series(
                size=size,
                hourly_seasonality=hourly_seasonality,
                hourly_seasonality_params=hourly_seasonality_params,
                trend_params=trend_params,
                weekday_dummy_params=weekday_dummy_params,
                annual_seasonality_params=annual_seasonality_params,
                holiday_alpha=holiday_alpha,
                outlier_alpha=outlier_alpha,
                noise_scale=noise_scale,
            ),
        }
    )