sklears_python/
model_selection.rs1use crate::linear::common::{core_array1_to_py, core_array2_to_py};
7use numpy::{PyArray1, PyArray2, PyReadonlyArray1, PyReadonlyArray2, PyUntypedArrayMethods};
8use pyo3::prelude::*;
9use scirs2_core::ndarray::{Array1, Array2};
10
11type TrainTestSplitResult = (
13 Py<PyArray2<f64>>,
14 Py<PyArray2<f64>>,
15 Py<PyArray1<f64>>,
16 Py<PyArray1<f64>>,
17);
18
19#[pyfunction]
21#[allow(clippy::too_many_arguments)] #[pyo3(signature = (x, _y=None, _test_size=None, _train_size=None, _random_state=None, _shuffle=true, _stratify=None))]
23pub fn train_test_split(
24 py: Python<'_>,
25 x: PyReadonlyArray2<f64>,
26 _y: Option<PyReadonlyArray1<f64>>,
27 _test_size: Option<f64>,
28 _train_size: Option<f64>,
29 _random_state: Option<u64>,
30 _shuffle: bool,
31 _stratify: Option<PyReadonlyArray1<f64>>,
32) -> PyResult<TrainTestSplitResult> {
33 let _n_samples = x.shape()[0];
35
36 let x_train = Array2::<f64>::zeros((1, 1));
37 let x_test = Array2::<f64>::zeros((1, 1));
38 let y_train = Array1::<f64>::zeros(1);
39 let y_test = Array1::<f64>::zeros(1);
40
41 Ok((
42 core_array2_to_py(py, &x_train)?,
43 core_array2_to_py(py, &x_test)?,
44 core_array1_to_py(py, &y_train),
45 core_array1_to_py(py, &y_test),
46 ))
47}
48
49#[pyclass(name = "KFold")]
51pub struct PyKFold {
52 n_splits: usize,
53}
54
55#[pymethods]
56impl PyKFold {
57 #[new]
58 fn new(n_splits: usize) -> Self {
59 Self { n_splits }
60 }
61
62 fn get_n_splits(&self) -> usize {
63 self.n_splits
64 }
65
66 fn split(&self, _x: PyReadonlyArray2<f64>) -> PyResult<Vec<(Vec<usize>, Vec<usize>)>> {
67 Ok(vec![(vec![0], vec![1])])
69 }
70}