import os from dataclasses import dataclass from functools import lru_cache from typing import Dict import yaml @dataclass class GeneralConfig: run_mode: str @dataclass class DataSetConfig: num_slices: int train_split: float seed: int modulation_types: list val_split: float beta: float sps: int snr_start: int snr_end: int snr_step: int num_iterations: int recording_length: int modulation_settings: Dict[str, Dict[str, str]] @dataclass class TrainingConfig: batch_size: int epochs: int learning_rate: float use_gpu: bool drop_rate: float drop_path_rate: float wd: int @dataclass class AppConfig: optimization_style: str target_platform: str class AppSettings: """Application settings, to be initialized from app.yaml configuration file.""" def __init__(self, config_file: str): # Load the YAML configuration file with open(config_file, "r") as f: config_data = yaml.safe_load(f) # Parse the loaded YAML into dataclass objects self.general = GeneralConfig(**config_data["general"]) self.dataset = DataSetConfig(**config_data["dataset"]) self.training = TrainingConfig(**config_data["training"]) self.app = AppConfig(**config_data["app"]) @lru_cache def get_app_settings() -> AppSettings: """Return application configuration settings.""" module_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) config_file = os.path.join(module_path, "conf", "app.yaml") return AppSettings(config_file=config_file) if __name__ == "__main__": s = get_app_settings()