| |
| """ |
| Script to validate BeatHeritage V1 config against dataclasses |
| """ |
| import yaml |
| import sys |
| from pathlib import Path |
|
|
| |
| sys.path.append(str(Path(__file__).parent)) |
|
|
| try: |
| from osuT5.osuT5.config import * |
| print("[OK] All config classes imported successfully") |
| except Exception as e: |
| print(f"[ERROR] Error importing config classes: {e}") |
| sys.exit(1) |
|
|
| def validate_config(): |
| print("\n[INFO] Validating BeatHeritage V1 config...") |
| |
| config_path = "configs/train/beatheritage_v1.yaml" |
| |
| try: |
| with open(config_path, 'r') as f: |
| config_data = yaml.safe_load(f) |
| print(f"[OK] Successfully loaded {config_path}") |
| except Exception as e: |
| print(f"[ERROR] Error loading config: {e}") |
| return False |
| |
| print(f"\n[INFO] Top-level config sections: {list(config_data.keys())}") |
| |
| |
| sections_to_check = { |
| 'optim': OptimizerConfig, |
| 'dataloader': DataloaderConfig, |
| 'training': TrainingConfig, |
| 'loss': LossConfig, |
| 'metrics': MetricsConfig, |
| } |
| |
| for section_name, config_class in sections_to_check.items(): |
| if section_name in config_data: |
| section_data = config_data[section_name] |
| if isinstance(section_data, dict): |
| print(f"\n[INFO] Checking {section_name} section:") |
| print(f" Config keys: {list(section_data.keys())}") |
| |
| |
| import inspect |
| class_fields = list(inspect.signature(config_class).parameters.keys()) |
| print(f" Class fields: {class_fields}") |
| |
| |
| config_keys = set(section_data.keys()) |
| class_fields_set = set(class_fields) |
| |
| missing_in_class = config_keys - class_fields_set |
| missing_in_config = class_fields_set - config_keys |
| |
| if missing_in_class: |
| print(f" [ERROR] Keys in config but NOT in class: {missing_in_class}") |
| else: |
| print(f" [OK] All config keys exist in class") |
| |
| if missing_in_config: |
| print(f" [WARN] Keys in class but NOT in config: {missing_in_config}") |
| |
| |
| if 'data' in config_data and 'augmentation' in config_data['data']: |
| print(f"\n[INFO] Checking data.augmentation section:") |
| aug_data = config_data['data']['augmentation'] |
| print(f" Config keys: {list(aug_data.keys())}") |
| |
| import inspect |
| aug_fields = list(inspect.signature(AugmentationConfig).parameters.keys()) |
| print(f" Class fields: {aug_fields}") |
| |
| config_keys = set(aug_data.keys()) |
| class_fields_set = set(aug_fields) |
| |
| missing_in_class = config_keys - class_fields_set |
| if missing_in_class: |
| print(f" [ERROR] Keys in config but NOT in AugmentationConfig: {missing_in_class}") |
| else: |
| print(f" [OK] All augmentation config keys exist in class") |
| |
| print("\n[OK] Config validation completed!") |
| return True |
|
|
| if __name__ == "__main__": |
| validate_config() |
|
|