mod aggregates;
mod analytics;
mod feature_engineering;
mod helpers;
mod time_bucket;
mod window;
use datafusion::logical_expr::{AggregateUDF, ScalarUDF};
use datafusion::prelude::SessionContext;
use window::PartitionWindowUdf;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct ForecastLimits {
pub max_horizon: usize,
pub max_training_points: usize,
}
pub fn register_udfs(ctx: &SessionContext, limits: ForecastLimits) {
ctx.register_udf(ScalarUDF::new_from_impl(time_bucket::TimeBucketUdf::new()));
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::DiffKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::PctChangeKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::RollingMeanKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::RollingStdKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::RollingCorrKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::ZscoreKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::EwmKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::StlTrendKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::StlSeasonalKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::StlResidualKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<feature_engineering::StlDecomposeKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<analytics::AnomalyScoreKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<analytics::CorrelationKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<analytics::CrossCorrelationKernel>::udf());
ctx.register_udwf(PartitionWindowUdf::<analytics::MultivariateAnomalyKernel>::udf());
ctx.register_udaf(AggregateUDF::new_from_impl(aggregates::FirstUdaf::new()));
ctx.register_udaf(AggregateUDF::new_from_impl(aggregates::LastUdaf::new()));
ctx.register_udaf(AggregateUDF::new_from_impl(aggregates::RateUdaf::new()));
ctx.register_udaf(AggregateUDF::new_from_impl(aggregates::IRateUdaf::new()));
ctx.register_udaf(AggregateUDF::new_from_impl(aggregates::ForecastUdaf::new(
limits,
)));
ctx.register_udaf(AggregateUDF::new_from_impl(
aggregates::AutoForecastUdaf::new(limits),
));
ctx.register_udaf(AggregateUDF::new_from_impl(
aggregates::MultivariateForecastUdaf::new(limits),
));
}