Skip to main content

scirs2/stats/
functions_5.rs

1//! Auto-generated module
2//!
3//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
4
5use pyo3::exceptions::PyRuntimeError;
6use pyo3::prelude::*;
7use pyo3::types::{PyAny, PyDict};
8use scirs2_numpy::{PyArray1, PyArrayMethods};
9
10use super::types::{
11    PyBeta, PyBinomial, PyCauchy, PyChiSquare, PyExponential, PyF, PyGamma, PyGeometric, PyLaplace,
12    PyLogistic, PyLognormal, PyNormal, PyPareto, PyPoisson, PyStudentT, PyUniform, PyWeibull,
13};
14
15// Import functions from other modules for register_module
16use super::batch::register_batch_module;
17use super::functions::{
18    correlation_py, covariance_py, describe_py, iqr_py, mean_py, median_py, percentile_py, std_py,
19    ttest_1samp_py, ttest_ind_py, var_py,
20};
21use super::functions_2::{
22    boxplot_stats_py, coef_variation_py, cross_entropy_py, data_range_py, entropy_py,
23    gini_coefficient_py, gmean_py, hmean_py, kl_divergence_py, kurtosis_ci_py, kurtosis_py,
24    mean_abs_deviation_py, median_abs_deviation_py, mode_py, moment_py, quartiles_py, quintiles_py,
25    skew_py, skewness_ci_py, ttest_rel_py, weighted_mean_py, winsorized_mean_py,
26    winsorized_variance_py, zscore_py,
27};
28use super::functions_3::{
29    anderson_darling_py, bartlett_test_py, brown_forsythe_py, chisquare_py, covariance_simd_py,
30    dagostino_k2_py, deciles_py, f_oneway_py, kruskal_py, kurtosis_simd_py, levene_py,
31    mannwhitneyu_py, mean_simd_py, moment_simd_py, pearson_r_simd_py, percentile_range_py, sem_py,
32    shapiro_py, skewness_simd_py, std_simd_py, variance_simd_py, wilcoxon_py,
33};
34use super::functions_4::{
35    chi2_independence_py, chi2_yates_py, fisher_exact_py, friedman_py, ks_2samp_py, linregress_py,
36    odds_ratio_py, pearsonr_py, relative_risk_py, spearmanr_py, tukey_hsd_py,
37};
38use scirs2_stats::kendalltau;
39
40/// Kendall tau rank correlation coefficient with significance test.
41///
42/// Calculates the Kendall tau rank correlation coefficient and tests for non-correlation.
43///
44/// Parameters:
45///     x: First array of observations
46///     y: Second array of observations (same length as x)
47///     method: Kendall tau variant: "b" (default) or "c"
48///     alternative: Type of test: "two-sided" (default), "less", or "greater"
49///
50/// Returns:
51///     Dictionary containing:
52///     - correlation: Kendall tau correlation coefficient (tau)
53///     - pvalue: P-value for testing non-correlation
54#[pyfunction]
55#[pyo3(signature = (x, y, method = "b", alternative = "two-sided"))]
56fn kendalltau_py(
57    py: Python,
58    x: &Bound<'_, PyArray1<f64>>,
59    y: &Bound<'_, PyArray1<f64>>,
60    method: &str,
61    alternative: &str,
62) -> PyResult<Py<PyAny>> {
63    let x_readonly = x.readonly();
64    let x_arr = x_readonly.as_array();
65    let y_readonly = y.readonly();
66    let y_arr = y_readonly.as_array();
67    let (tau, pvalue) = kendalltau(&x_arr.view(), &y_arr.view(), method, alternative)
68        .map_err(|e| PyRuntimeError::new_err(format!("Kendall tau test failed: {}", e)))?;
69    let dict = PyDict::new(py);
70    dict.set_item("correlation", tau)?;
71    dict.set_item("pvalue", pvalue)?;
72    Ok(dict.into())
73}
74/// Python module registration
75pub fn register_module(m: &Bound<'_, PyModule>) -> PyResult<()> {
76    m.add_function(wrap_pyfunction!(describe_py, m)?)?;
77    m.add_function(wrap_pyfunction!(mean_py, m)?)?;
78    m.add_function(wrap_pyfunction!(std_py, m)?)?;
79    m.add_function(wrap_pyfunction!(var_py, m)?)?;
80    m.add_function(wrap_pyfunction!(percentile_py, m)?)?;
81    m.add_function(wrap_pyfunction!(correlation_py, m)?)?;
82    m.add_function(wrap_pyfunction!(covariance_py, m)?)?;
83    m.add_function(wrap_pyfunction!(median_py, m)?)?;
84    m.add_function(wrap_pyfunction!(iqr_py, m)?)?;
85    m.add_function(wrap_pyfunction!(ttest_1samp_py, m)?)?;
86    m.add_function(wrap_pyfunction!(ttest_ind_py, m)?)?;
87    m.add_function(wrap_pyfunction!(ttest_rel_py, m)?)?;
88    m.add_function(wrap_pyfunction!(shapiro_py, m)?)?;
89    m.add_function(wrap_pyfunction!(chisquare_py, m)?)?;
90    m.add_function(wrap_pyfunction!(f_oneway_py, m)?)?;
91    m.add_function(wrap_pyfunction!(wilcoxon_py, m)?)?;
92    m.add_function(wrap_pyfunction!(mannwhitneyu_py, m)?)?;
93    m.add_function(wrap_pyfunction!(kruskal_py, m)?)?;
94    m.add_function(wrap_pyfunction!(levene_py, m)?)?;
95    m.add_function(wrap_pyfunction!(bartlett_test_py, m)?)?;
96    m.add_function(wrap_pyfunction!(brown_forsythe_py, m)?)?;
97    m.add_function(wrap_pyfunction!(anderson_darling_py, m)?)?;
98    m.add_function(wrap_pyfunction!(dagostino_k2_py, m)?)?;
99    m.add_function(wrap_pyfunction!(ks_2samp_py, m)?)?;
100    m.add_function(wrap_pyfunction!(friedman_py, m)?)?;
101    m.add_function(wrap_pyfunction!(chi2_independence_py, m)?)?;
102    m.add_function(wrap_pyfunction!(chi2_yates_py, m)?)?;
103    m.add_function(wrap_pyfunction!(fisher_exact_py, m)?)?;
104    m.add_function(wrap_pyfunction!(odds_ratio_py, m)?)?;
105    m.add_function(wrap_pyfunction!(relative_risk_py, m)?)?;
106    m.add_function(wrap_pyfunction!(linregress_py, m)?)?;
107    m.add_function(wrap_pyfunction!(tukey_hsd_py, m)?)?;
108    m.add_function(wrap_pyfunction!(skew_py, m)?)?;
109    m.add_function(wrap_pyfunction!(kurtosis_py, m)?)?;
110    m.add_function(wrap_pyfunction!(mode_py, m)?)?;
111    m.add_function(wrap_pyfunction!(gmean_py, m)?)?;
112    m.add_function(wrap_pyfunction!(hmean_py, m)?)?;
113    m.add_function(wrap_pyfunction!(zscore_py, m)?)?;
114    m.add_function(wrap_pyfunction!(mean_abs_deviation_py, m)?)?;
115    m.add_function(wrap_pyfunction!(median_abs_deviation_py, m)?)?;
116    m.add_function(wrap_pyfunction!(data_range_py, m)?)?;
117    m.add_function(wrap_pyfunction!(coef_variation_py, m)?)?;
118    m.add_function(wrap_pyfunction!(gini_coefficient_py, m)?)?;
119    m.add_function(wrap_pyfunction!(boxplot_stats_py, m)?)?;
120    m.add_function(wrap_pyfunction!(quartiles_py, m)?)?;
121    m.add_function(wrap_pyfunction!(quintiles_py, m)?)?;
122    m.add_function(wrap_pyfunction!(deciles_py, m)?)?;
123    m.add_function(wrap_pyfunction!(sem_py, m)?)?;
124    m.add_function(wrap_pyfunction!(percentile_range_py, m)?)?;
125    m.add_function(wrap_pyfunction!(winsorized_mean_py, m)?)?;
126    m.add_function(wrap_pyfunction!(winsorized_variance_py, m)?)?;
127    m.add_function(wrap_pyfunction!(skewness_simd_py, m)?)?;
128    m.add_function(wrap_pyfunction!(kurtosis_simd_py, m)?)?;
129    m.add_function(wrap_pyfunction!(pearson_r_simd_py, m)?)?;
130    m.add_function(wrap_pyfunction!(covariance_simd_py, m)?)?;
131    m.add_function(wrap_pyfunction!(moment_simd_py, m)?)?;
132    m.add_function(wrap_pyfunction!(mean_simd_py, m)?)?;
133    m.add_function(wrap_pyfunction!(std_simd_py, m)?)?;
134    m.add_function(wrap_pyfunction!(variance_simd_py, m)?)?;
135    m.add_function(wrap_pyfunction!(entropy_py, m)?)?;
136    m.add_function(wrap_pyfunction!(kl_divergence_py, m)?)?;
137    m.add_function(wrap_pyfunction!(cross_entropy_py, m)?)?;
138    m.add_function(wrap_pyfunction!(weighted_mean_py, m)?)?;
139    m.add_function(wrap_pyfunction!(moment_py, m)?)?;
140    m.add_function(wrap_pyfunction!(skewness_ci_py, m)?)?;
141    m.add_function(wrap_pyfunction!(kurtosis_ci_py, m)?)?;
142    m.add_class::<PyNormal>()?;
143    m.add_class::<PyBinomial>()?;
144    m.add_class::<PyPoisson>()?;
145    m.add_class::<PyExponential>()?;
146    m.add_class::<PyUniform>()?;
147    m.add_class::<PyBeta>()?;
148    m.add_class::<PyGamma>()?;
149    m.add_class::<PyChiSquare>()?;
150    m.add_class::<PyStudentT>()?;
151    m.add_class::<PyCauchy>()?;
152    m.add_class::<PyF>()?;
153    m.add_class::<PyLognormal>()?;
154    m.add_class::<PyWeibull>()?;
155    m.add_class::<PyLaplace>()?;
156    m.add_class::<PyLogistic>()?;
157    m.add_class::<PyPareto>()?;
158    m.add_class::<PyGeometric>()?;
159    m.add_function(wrap_pyfunction!(pearsonr_py, m)?)?;
160    m.add_function(wrap_pyfunction!(spearmanr_py, m)?)?;
161    m.add_function(wrap_pyfunction!(kendalltau_py, m)?)?;
162    // Batch/vectorized APIs
163    register_batch_module(m)?;
164    Ok(())
165}