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