Source code for aurora.core.optimization.result

# SPDX-License-Identifier: MIT
# Copyright (c) 2025 Lucy Eduardo Arias

"""Optimization result container."""

from __future__ import annotations

from dataclasses import dataclass

from ..types import Array, Scalar


[docs] @dataclass(frozen=True) class OptimizationResult: """Container for optimization results. Attributes ---------- x : Array Optimal parameter vector found by the optimiser. fun : Scalar Objective function value at ``x``. grad : Array or None Gradient of the objective at ``x`` (if available). hess : Array or None Hessian of the objective at ``x`` (if available). success : bool, default=True Whether the optimiser converged successfully. message : str Human-readable description of the termination reason. nit : int, default=0 Number of iterations performed. nfev : int, default=0 Number of objective function evaluations. njev : int, default=0 Number of gradient evaluations. nhev : int, default=0 Number of Hessian evaluations. backtrack_iterations : int, default=0 Number of backtracking (step-halving) reductions performed. condition_number : float or None Maximum observed condition number of the weighted normal equations (IRLS) or the Hessian (Newton). ``None`` when not monitored. """ x: Array fun: Scalar grad: Array | None = None hess: Array | None = None success: bool = True message: str = "Optimization terminated successfully" nit: int = 0 nfev: int = 0 njev: int = 0 nhev: int = 0 backtrack_iterations: int = 0 condition_number: float | None = None def __repr__(self) -> str: # pragma: no cover - cosmetic status = "SUCCESS" if self.success else "FAILURE" return ( "OptimizationResult(\n" f" status={status},\n" f" fun={self.fun:.6e},\n" f" nit={self.nit},\n" f" nfev={self.nfev},\n" f" message='{self.message}'\n" ")" )
__all__ = ["OptimizationResult"]