From be2dc382e4b9ce2eabd8290cc8dc3452fa285be7 Mon Sep 17 00:00:00 2001 From: Ella Wu <602725+ewu63@users.noreply.github.com> Date: Fri, 15 Aug 2025 18:08:46 -0700 Subject: [PATCH 1/5] recover ability to retrieve solution via key --- pyoptsparse/pyOpt_solution.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pyoptsparse/pyOpt_solution.py b/pyoptsparse/pyOpt_solution.py index 5de0fe05..770ad4b5 100644 --- a/pyoptsparse/pyOpt_solution.py +++ b/pyoptsparse/pyOpt_solution.py @@ -1,6 +1,6 @@ # Standard Python modules import copy -from dataclasses import dataclass +from dataclasses import asdict, dataclass from typing import Optional # External modules @@ -23,6 +23,10 @@ class SolutionInform: def from_informs(cls, informs: dict[int, str], value: int): return cls(value=value, message=informs[value]) + def __getitem__(self, key): + d = asdict(self) + return d[key] + class Solution(Optimization): def __init__(self, optProb, xStar, fStar, lambdaStar, optInform: Optional[SolutionInform], info): From a1ad957dc8503d6472e8f0657a4d467bbba36fa7 Mon Sep 17 00:00:00 2001 From: Ella Wu <602725+ewu63@users.noreply.github.com> Date: Fri, 15 Aug 2025 18:09:45 -0700 Subject: [PATCH 2/5] map text to message --- pyoptsparse/pyOpt_solution.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyoptsparse/pyOpt_solution.py b/pyoptsparse/pyOpt_solution.py index 770ad4b5..9cd42445 100644 --- a/pyoptsparse/pyOpt_solution.py +++ b/pyoptsparse/pyOpt_solution.py @@ -25,6 +25,8 @@ def from_informs(cls, informs: dict[int, str], value: int): def __getitem__(self, key): d = asdict(self) + if key == "text": + return d["message"] return d[key] From a69f80975b6a060df8889e7f831bdfa1f313084b Mon Sep 17 00:00:00 2001 From: Ella Wu <602725+ewu63@users.noreply.github.com> Date: Fri, 15 Aug 2025 18:12:23 -0700 Subject: [PATCH 3/5] add test --- tests/test_other.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/tests/test_other.py b/tests/test_other.py index 59d1c066..eefd4b8f 100644 --- a/tests/test_other.py +++ b/tests/test_other.py @@ -5,6 +5,7 @@ # First party modules from pyoptsparse import Optimizers, list_optimizers +from pyoptsparse.pyOpt_solution import SolutionInform from pyoptsparse.pyOpt_utils import try_import_compiled_module_from_path # we have to unset this environment variable because otherwise @@ -36,3 +37,12 @@ def test_list_optimizers(self): self.assertIn(Optimizers.PSQP, all_opt) self.assertIn(Optimizers.ALPSO, all_opt) self.assertIn(Optimizers.NSGA2, all_opt) + + +class TestSolInform(unittest.TestCase): + def test_sol_inform_key_access(self): + sol = SolutionInform(value=1, message="test message") + assert sol.value == 1 + assert sol["value"] == 1 + assert sol.message == "test message" + assert sol["text"] == "test message" From 197a23f3a508bbe6cccc0ac59a67ec348049663b Mon Sep 17 00:00:00 2001 From: Ella Wu <602725+ewu63@users.noreply.github.com> Date: Fri, 15 Aug 2025 18:17:57 -0700 Subject: [PATCH 4/5] try and see if post releases work --- pyoptsparse/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyoptsparse/__init__.py b/pyoptsparse/__init__.py index c61c08fd..771b5305 100644 --- a/pyoptsparse/__init__.py +++ b/pyoptsparse/__init__.py @@ -1,4 +1,4 @@ -__version__ = "2.14.1" +__version__ = "2.14.1.post1" from .pyOpt_history import History from .pyOpt_variable import Variable From 0e006d47a785e8cfc9b6efe327daaec15fc95f23 Mon Sep 17 00:00:00 2001 From: Ella Wu <602725+ewu63@users.noreply.github.com> Date: Fri, 15 Aug 2025 22:10:59 -0700 Subject: [PATCH 5/5] bump to 2.14.2 apparently we do not support .post1 --- pyoptsparse/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyoptsparse/__init__.py b/pyoptsparse/__init__.py index 771b5305..0e581ce2 100644 --- a/pyoptsparse/__init__.py +++ b/pyoptsparse/__init__.py @@ -1,4 +1,4 @@ -__version__ = "2.14.1.post1" +__version__ = "2.14.2" from .pyOpt_history import History from .pyOpt_variable import Variable