"""Тесты кросс-валидации на синтетических данных.""" from __future__ import annotations import numpy as np import pandas as pd from stylometry.cv import run_repeated_cv def test_repeated_cv_runs_and_has_all_predictions() -> None: rng = np.random.default_rng(0) n_samples = 60 n_classes = 3 X = pd.DataFrame( { "feature_1": rng.normal(size=n_samples), "feature_2": rng.normal(size=n_samples), } ) y = np.repeat([f"c{index}" for index in range(n_classes)], 20) from sklearn.linear_model import LogisticRegression from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler pipeline = Pipeline( [("scale", StandardScaler()), ("model", LogisticRegression(max_iter=1000))] ) result = run_repeated_cv( pipeline, X, y, n_splits=3, n_repeats=2, seed=42, verbose=False ) assert len(result.oof) == n_samples * 2 assert set(result.oof["y_true"]) == set(y) assert result.fold_metrics["macro_f1"].between(0, 1).all() assert result.labels.tolist() == ["c0", "c1", "c2"]