from __future__ import annotations from dataclasses import dataclass, field from pathlib import Path import sys PROJECT_ROOT = Path(__file__).resolve().parents[1] if str(PROJECT_ROOT) not in sys.path: sys.path.insert(0, str(PROJECT_ROOT)) from scripts.config import CORE_FEATURE_NAMES, DataConfig @dataclass class TreeModelConfig: candidate_models: tuple[str, ...] = ("extra_trees", "random_forest", "gradient_boosting") random_state: int = 42 @dataclass class TrainConfig: checkpoint_dir: str = "checkpoints_tree" summary_name: str = "model_selection.csv" best_model_name: str = "best_tr_tree.pkl" @dataclass class ExperimentConfig: data: DataConfig = field(default_factory=DataConfig) model: TreeModelConfig = field(default_factory=TreeModelConfig) train: TrainConfig = field(default_factory=TrainConfig) def make_experiment_config() -> ExperimentConfig: return ExperimentConfig() def checkpoint_dir(config: ExperimentConfig) -> Path: path = config.data.project_root / config.train.checkpoint_dir / "task1_tr_tree" path.mkdir(parents=True, exist_ok=True) return path def evaluation_dir(config: ExperimentConfig) -> Path: path = config.data.project_root / "evaluation_outputs" / "task1_tr_tree" path.mkdir(parents=True, exist_ok=True) return path FEATURE_NAMES = CORE_FEATURE_NAMES