stock-trek 0.2.2

Stock Trek time-series analysis
Documentation
#[cfg(feature = "python")]
use {
    crate::bindings::python::statistics::{
        advanced, core, decompose, evaluation, exponential_smoothing, filters, frequency,
        hypothesis, moving_averages, time_series, transformations, wavelets,
    },
    pyo3::prelude::*,
};

#[cfg(feature = "python")]
pub fn create_module(py: Python) -> PyResult<Bound<PyModule>> {
    let module = PyModule::new(py, "statistics")?;
    //
    module.add_function(wrap_pyfunction!(advanced::hurst_exponent, &module)?)?;
    module.add_function(wrap_pyfunction!(advanced::mutual_information, &module)?)?;
    module.add_function(wrap_pyfunction!(advanced::sample_entropy, &module)?)?;
    module.add_function(wrap_pyfunction!(advanced::shannon_entropy, &module)?)?;
    //
    module.add_function(wrap_pyfunction!(core::correlation, &module)?)?;
    module.add_function(wrap_pyfunction!(core::covariance, &module)?)?;
    module.add_function(wrap_pyfunction!(core::kurtosis, &module)?)?;
    module.add_function(wrap_pyfunction!(core::mean, &module)?)?;
    module.add_function(wrap_pyfunction!(core::skewness, &module)?)?;
    module.add_function(wrap_pyfunction!(core::standard_deviation, &module)?)?;
    module.add_function(wrap_pyfunction!(core::variance, &module)?)?;
    //
    module.add_function(wrap_pyfunction!(decompose::loess_smooth, &module)?)?;
    module.add_function(wrap_pyfunction!(decompose::seasonal_decompose, &module)?)?;
    module.add_function(wrap_pyfunction!(
        decompose::seasonal_trend_decomposition_using_loess,
        &module
    )?)?;
    //
    module.add_function(wrap_pyfunction!(
        evaluation::akaike_information_criterion,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(
        evaluation::bayesian_information_criterion,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(evaluation::log_likelihood, &module)?)?;
    module.add_function(wrap_pyfunction!(evaluation::mean_absolute_error, &module)?)?;
    module.add_function(wrap_pyfunction!(
        evaluation::mean_absolute_percentage_error,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(evaluation::mean_squared_error, &module)?)?;
    module.add_function(wrap_pyfunction!(
        evaluation::root_mean_squared_error,
        &module
    )?)?;
    //
    module.add_function(wrap_pyfunction!(
        exponential_smoothing::holt_linear_trend,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(
        exponential_smoothing::holt_winters,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(
        exponential_smoothing::simple_exponential_smoothing,
        &module
    )?)?;
    //
    module.add_function(wrap_pyfunction!(filters::hodrick_prescott_filter, &module)?)?;
    module.add_function(wrap_pyfunction!(filters::wiener_filter, &module)?)?;
    //
    module.add_function(wrap_pyfunction!(
        frequency::discrete_fourier_transform,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(
        frequency::inverse_discrete_fourier_transform,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(frequency::periodogram, &module)?)?;
    module.add_function(wrap_pyfunction!(frequency::spectral_density, &module)?)?;
    //
    module.add_function(wrap_pyfunction!(
        hypothesis::augmented_dickey_fuller,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(hypothesis::durbin_watson, &module)?)?;
    module.add_function(wrap_pyfunction!(hypothesis::jarque_bera, &module)?)?;
    module.add_function(wrap_pyfunction!(
        hypothesis::kwiatkowski_phillips_schmidt_shin,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(hypothesis::ljung_box, &module)?)?;
    //
    module.add_function(wrap_pyfunction!(
        moving_averages::exponential_moving_average,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(
        moving_averages::simple_moving_average,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(
        moving_averages::weighted_moving_average,
        &module
    )?)?;
    //
    module.add_function(wrap_pyfunction!(time_series::autocorrelation, &module)?)?;
    module.add_function(wrap_pyfunction!(time_series::autocovariance, &module)?)?;
    module.add_function(wrap_pyfunction!(time_series::cross_correlation, &module)?)?;
    module.add_function(wrap_pyfunction!(
        time_series::partial_autocorrelation,
        &module
    )?)?;
    //
    module.add_function(wrap_pyfunction!(transformations::box_cox, &module)?)?;
    module.add_function(wrap_pyfunction!(transformations::detrend_linear, &module)?)?;
    module.add_function(wrap_pyfunction!(transformations::difference, &module)?)?;
    module.add_function(wrap_pyfunction!(transformations::lag, &module)?)?;
    module.add_function(wrap_pyfunction!(transformations::logarithm, &module)?)?;
    module.add_function(wrap_pyfunction!(transformations::rolling_mean, &module)?)?;
    module.add_function(wrap_pyfunction!(
        transformations::rolling_standard_deviation,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(
        transformations::seasonal_difference,
        &module
    )?)?;
    //
    module.add_function(wrap_pyfunction!(
        wavelets::continuous_wavelet_transform,
        &module
    )?)?;
    module.add_function(wrap_pyfunction!(
        wavelets::discrete_wavelet_transform,
        &module
    )?)?;
    //
    Ok(module)
}