Source code for cann.engine.calibration_config
from __future__ import annotations
import ast
from dataclasses import dataclass
from typing import Any, Dict, Literal, Tuple
import numpy as np
[docs]
@dataclass
class CalibrationConfig:
"""
Settings for the calibration optimization process.
Key fields include ``max_iter``, ``pop_size``, ``strategy``, and inference ``batch_size``.
"""
optimizer: Literal["de"] = "de"
strategy: str = "best1bin"
max_iter: int = 2000
pop_size: int = 10
tol: float = 0.01
mutation: float | Tuple[float, float] = (0.5, 1.0)
recombination: float = 0.7
init: Literal["latinhypercube", "random"] = "latinhypercube"
polish: bool = True
batch_size: int = 32768
weight_atm: float = 1.0
seed: int | None = 42
[docs]
@classmethod
def from_dict(cls, cfg: dict) -> CalibrationConfig:
"""
Create a CalibrationConfig instance from a dictionary.
Args:
cfg (dict): Dictionary containing configuration parameters.
Returns:
CalibrationConfig: Parsed calibration configuration.
Notes:
If ``mutation`` is provided as a string (e.g. from YAML), it is parsed via
:func:`ast.literal_eval` when possible.
"""
if "mutation" in cfg:
mutation = cfg["mutation"]
if isinstance(mutation, str):
try:
mutation = ast.literal_eval(mutation)
except (ValueError, SyntaxError):
pass
if isinstance(mutation, list):
mutation = tuple(mutation)
cfg["mutation"] = mutation
return cls(**cfg)
[docs]
@dataclass
class CalibrationResult:
"""
Result of the calibration optimization process after optimization.
Fields include ``optimal_parameters``, ``final_loss``, convergence diagnostics, and
optional optimizer diagnostics.
"""
optimal_parameters: np.ndarray
final_loss: float
num_iterations: int
num_function_evals: int
runtime_seconds: float
converged: bool
diagnostics: Dict[str, Any]