use crate::error::{Result, TimeSeriesError};
use scirs2_core::ndarray::Array1;
use std::fmt::Debug;
#[derive(Debug, Clone)]
pub struct ExpSmoothingParams {
pub alpha: f64,
pub beta: Option<f64>,
pub gamma: Option<f64>,
pub seasonal_period: Option<usize>,
pub multiplicative_trend: bool,
pub multiplicative_seasonality: bool,
pub damped_trend: bool,
pub phi: Option<f64>,
}
#[derive(Debug, Clone)]
pub struct AutoArimaOptions {
pub max_p: usize,
pub max_d: usize,
pub max_q: usize,
pub seasonal: bool,
pub seasonal_period: Option<usize>,
pub max_seasonal_p: usize,
pub max_seasonal_d: usize,
pub max_seasonal_q: usize,
pub auto_diff: bool,
pub with_constant: bool,
pub information_criterion: String,
pub stepwise: bool,
pub max_order: usize,
}
#[derive(Debug, Clone)]
pub struct ForecastResult<F> {
pub forecast: Array1<F>,
pub lower_ci: Array1<F>,
pub upper_ci: Array1<F>,
}
#[derive(Debug, Clone)]
pub struct ArimaParams {
pub p: usize,
pub d: usize,
pub q: usize,
pub seasonal_p: Option<usize>,
pub seasonal_d: Option<usize>,
pub seasonal_q: Option<usize>,
pub seasonal_period: Option<usize>,
pub fit_intercept: bool,
pub trend: Option<String>,
}
#[derive(Debug, Clone)]
pub(super) struct ModelFitMetrics<F> {
pub(super) aic: F,
pub(super) bic: F,
#[allow(dead_code)]
pub(super) hqic: F,
#[allow(dead_code)]
pub(super) log_likelihood: F,
#[allow(dead_code)]
pub(super) mse: F,
}