use crate::linear::common::{core_array1_to_py, core_array2_to_py};
use numpy::{PyArray1, PyArray2, PyReadonlyArray1, PyReadonlyArray2, PyUntypedArrayMethods};
use pyo3::prelude::*;
use scirs2_core::ndarray::{Array1, Array2};
type TrainTestSplitResult = (
Py<PyArray2<f64>>,
Py<PyArray2<f64>>,
Py<PyArray1<f64>>,
Py<PyArray1<f64>>,
);
#[pyfunction]
#[allow(clippy::too_many_arguments)] #[pyo3(signature = (x, _y=None, _test_size=None, _train_size=None, _random_state=None, _shuffle=true, _stratify=None))]
pub fn train_test_split(
py: Python<'_>,
x: PyReadonlyArray2<f64>,
_y: Option<PyReadonlyArray1<f64>>,
_test_size: Option<f64>,
_train_size: Option<f64>,
_random_state: Option<u64>,
_shuffle: bool,
_stratify: Option<PyReadonlyArray1<f64>>,
) -> PyResult<TrainTestSplitResult> {
let _n_samples = x.shape()[0];
let x_train = Array2::<f64>::zeros((1, 1));
let x_test = Array2::<f64>::zeros((1, 1));
let y_train = Array1::<f64>::zeros(1);
let y_test = Array1::<f64>::zeros(1);
Ok((
core_array2_to_py(py, &x_train)?,
core_array2_to_py(py, &x_test)?,
core_array1_to_py(py, &y_train),
core_array1_to_py(py, &y_test),
))
}
#[pyclass(name = "KFold")]
pub struct PyKFold {
n_splits: usize,
}
#[pymethods]
impl PyKFold {
#[new]
fn new(n_splits: usize) -> Self {
Self { n_splits }
}
fn get_n_splits(&self) -> usize {
self.n_splits
}
fn split(&self, _x: PyReadonlyArray2<f64>) -> PyResult<Vec<(Vec<usize>, Vec<usize>)>> {
Ok(vec![(vec![0], vec![1])])
}
}