chronos_ts/lib.rs
1//! # chronos-ts
2//!
3//! `chronos-ts` is a pure-Rust time-series modeling and forecasting library
4//! (no LAPACK/BLAS/MKL dependency, so it builds anywhere).
5//!
6//! ## Features
7//! - **Auto ARIMA / SARIMA / SARIMAX**: automated order selection with real
8//! coefficient estimation by Conditional Sum of Squares (default) or exact
9//! Gaussian maximum likelihood via the Kalman filter
10//! ([`EstimationMethod::Mle`](arima::EstimationMethod)). Includes a mean/drift
11//! term, coefficient standard errors, correct prediction intervals, and an
12//! optional Box-Cox transform.
13//! - **Prophet decomposition**: structural time series with trend changepoints,
14//! Fourier seasonalities, holidays, logistic growth, and Monte-Carlo intervals.
15//! - **Diagnostics & tuning**: residual ACF/PACF, Ljung-Box, Jarque-Bera, and
16//! cross-validated hyperparameter search.
17//!
18//! ## ARIMA quick start
19//!
20//! ```rust
21//! use chronos_ts::arima::{auto_arima, AutoArimaOptions};
22//! use ndarray::Array1;
23//!
24//! let series = Array1::from(vec![10.0, 12.0, 15.0, 14.0, 18.0, 20.0, 23.0]);
25//! let opts = AutoArimaOptions {
26//! max_p: 2,
27//! max_d: 1,
28//! max_q: 2,
29//! ..Default::default()
30//! };
31//!
32//! let model = auto_arima(&series, opts).expect("Model should fit successfully");
33//! let forecast = model.forecast(&series, 3);
34//! assert_eq!(forecast.len(), 3);
35//! ```
36//!
37//! ## Prophet quick start
38//!
39//! ```rust
40//! use chronos_ts::{ProphetDecomposition, SeasonalityMode};
41//! use chrono::{Duration, NaiveDate};
42//! use ndarray::Array1;
43//!
44//! let start = NaiveDate::from_ymd_opt(2023, 1, 1).unwrap();
45//! let dates: Vec<NaiveDate> = (0..30).map(|i| start + Duration::days(i)).collect();
46//! let y = Array1::from_shape_fn(30, |i| 10.0 + 0.5 * i as f64);
47//!
48//! let mut model = ProphetDecomposition::new(5, 0.05);
49//! model.seasonality_mode = SeasonalityMode::Additive;
50//! model.add_seasonality("weekly", 7.0, 3);
51//! model.fit(&dates, &y, None, None).unwrap();
52//! let prediction = model.predict(&dates).unwrap();
53//! assert_eq!(prediction.yhat.len(), 30);
54//! ```
55
56// `non_snake_case` is allowed only in the modules that use the standard SARIMA
57// uppercase seasonal notation (P, D, Q); it is not enabled crate-wide.
58
59#[cfg(feature = "python")]
60pub mod py_bindings;
61
62pub mod arima;
63pub mod decomposition;
64pub mod diagnostics;
65pub mod errors;
66pub mod stat_tests;
67pub mod statespace;
68pub mod statespace_mle;
69pub mod tuning;
70pub mod utils;
71pub mod viz;
72
73// Internal implementation details — not part of the public API.
74pub(crate) mod arima_mle;
75pub(crate) mod arima_poly;
76pub(crate) mod linalg;
77
78// Core public API exports
79pub use arima::{
80 arima_cross_validation, auto_arima, Arima, ArimaCvReport, ArimaOrder, AutoArimaOptions,
81 EstimationMethod, InformationCriterion, SarimaModel, SarimaOrder,
82};
83pub use decomposition::{
84 Holiday, ProphetDecomposition, ProphetPrediction, SeasonalityMode, TrendType,
85};
86pub use diagnostics::{
87 CrossValidationEvaluator, CrossValidationReport, DiagnosticsResult, HorizonMetrics,
88 JarqueBeraResult, LjungBoxResult, ResidualDiagnostics,
89};
90pub use errors::{ChronosError, Result};
91pub use stat_tests::{adf_test, estimate_D, estimate_d, AdfTestResult};
92pub use statespace::{KalmanFilter, KalmanFilterResult, StateSpaceModel};
93pub use statespace_mle::{fit_state_space_mle, MleFitResult, StateSpaceLikelihoodCost};
94pub use tuning::{
95 AutoTuneResult, AutoTuner, HyperparameterCandidate, HyperparameterGrid, OptimizationMetric,
96};
97pub use viz::{ChartDataPoint, DecompositionExport, VisualizationExporter};