File size: 3,795 Bytes
cb099ef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from typing import Optional, Dict, Any

RANDOMIZATION_TYPE_ALIASES = {
    # Asymmetric
    'asymmetric': 'asymmetric', 'assym': 'asymmetric', 'a': 'asymmetric', 'asym': 'asymmetric', 'A': 'asymmetric',
    # Symmetric
    'symmetric': 'symmetric', 'sym': 'symmetric', 's': 'symmetric', 'S': 'symmetric',
    # Logarithmic
    'logarithmic': 'logarithmic', 'log': 'logarithmic', 'l': 'logarithmic', 'L': 'logarithmic',
    # Exponential
    'exponential': 'exponential', 'exp': 'exponential', 'e': 'exponential', 'E': 'exponential',
}

DEFAULT_RANDOMIZATION_TYPE = 'asymmetric'
DEFAULT_RANDOMIZATION_PERCENT = 0.2

# Base default values
BASE_DEFAULTS = {
    'sigma_min': 0.05,
    'sigma_max': 27.5,
    'start_blend': 0.1,
    'end_blend': 0.5,
    'sharpness': 1.0,
    'early_stopping_threshold': 0.01,
    'initial_step_size': 0.9,
    'final_step_size': 0.2,
    'initial_noise_scale': 1.25,
    'final_noise_scale': 0.8,
    'smooth_blend_factor': 9.0,
    'step_size_factor': 0.8,
    'noise_scale_factor': 0.8,
    'rho': 8.0
}

def validate_config(config: Dict[str, Any], logger: Optional[Any] = None) -> Dict[str, Any]:
    updated_config = config.copy()

    def log(message):
        if logger:
            logger.log(message)
        else:
            print(message)

    # Step 1: Set all base defaults if missing
    for key, base_value in BASE_DEFAULTS.items():
        if key not in updated_config:
            updated_config[key] = base_value
            log(f"[Config Correction] {key} missing. Set to base default: {base_value}")

        # Ensure _rand flag exists and is a boolean
        rand_flag = f"{key}_rand"
        if rand_flag not in updated_config or not isinstance(updated_config.get(rand_flag), bool):
            updated_config[rand_flag] = False
            log(f"[Config Correction] {rand_flag} missing or invalid. Set to False.")

        # Ensure _enable_randomization_type flag exists and is a boolean
        randomization_flag = f"{key}_enable_randomization_type"
        if randomization_flag not in updated_config or not isinstance(updated_config.get(randomization_flag), bool):
            updated_config[randomization_flag] = False
            log(f"[Config Correction] {randomization_flag} missing or invalid. Set to False.")

        # Ensure randomization_type exists
        randomization_type_key = f"{key}_randomization_type"
        if randomization_type_key not in updated_config:
            updated_config[randomization_type_key] = DEFAULT_RANDOMIZATION_TYPE
            log(f"[Config Correction] {randomization_type_key} missing. Set to '{DEFAULT_RANDOMIZATION_TYPE}'.")

        # Ensure randomization_percent exists
        randomization_percent_key = f"{key}_randomization_percent"
        if randomization_percent_key not in updated_config:
            updated_config[randomization_percent_key] = DEFAULT_RANDOMIZATION_PERCENT
            log(f"[Config Correction] {randomization_percent_key} missing. Set to {DEFAULT_RANDOMIZATION_PERCENT}.")

        # Ensure _rand_min and _rand_max exist
        min_key = f"{key}_rand_min"
        max_key = f"{key}_rand_max"
        percent = updated_config[randomization_percent_key]

        if min_key not in updated_config:
            updated_config[min_key] = updated_config[key] * (1 - percent)
            log(f"[Config Correction] {min_key} missing. Auto-calculated from base.")

        if max_key not in updated_config:
            updated_config[max_key] = updated_config[key] * (1 + percent)
            log(f"[Config Correction] {max_key} missing. Auto-calculated from base.")

    log("[Config Validation] Config validated and missing values filled successfully.")
    return updated_config