BeatHeritage-v1 / validate_config.py
fourmansyah's picture
Duplicate from hongminh54/BeatHeritage-v1
12a8e0f
#!/usr/bin/env python3
"""
Script to validate BeatHeritage V1 config against dataclasses
"""
import yaml
import sys
from pathlib import Path
# Add project to 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())}")
# Check each section
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())}")
# Get dataclass fields
import inspect
class_fields = list(inspect.signature(config_class).parameters.keys())
print(f" Class fields: {class_fields}")
# Check for mismatches
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}")
# Check data.augmentation specifically
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()