From 4db6ccc616c2148b66f6f0ef4feadcbfb0082581 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gerhard=20Br=C3=A4unlich?= Date: Thu, 4 Sep 2025 08:39:21 +0200 Subject: [PATCH] core: Fix bug in Problem.check_constraints --- engibench/core.py | 2 +- tests/test_problem.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/engibench/core.py b/engibench/core.py index d4164079..1b0ff822 100644 --- a/engibench/core.py +++ b/engibench/core.py @@ -188,7 +188,7 @@ def check_constraints(self, design: DesignType, config: dict[str, Any]) -> const the fields of `config` will be used as default values. """ defaults = dataclasses.asdict(self.config) if self.config is not None else {} - checked_config = self.Config(**defaults, **config) + checked_config = self.Config(**{**defaults, **config}) violations = constraint.check_field_constraints(checked_config) @constraint.constraint diff --git a/tests/test_problem.py b/tests/test_problem.py index 0a14b25d..c2e1cc28 100644 --- a/tests/test_problem.py +++ b/tests/test_problem.py @@ -59,6 +59,15 @@ def test_check_constraints_detects_missing_parameters() -> None: FakeProblem().check_constraints(design, config) +def test_check_constraints_overrides_default_values() -> None: + design = np.zeros((2, 3)) + fake_problem = FakeProblem() + fake_problem.config = FakeProblem.Config(x=10) + config = {"y": 1.0} + violations = fake_problem.check_constraints(design, config) + assert causes(violations) == ["Config.y: 1.0 ∉ [-∞, -1.0]"] + + def test_check_constraints_handles_constraints_on_design_and_config() -> None: @constraint(categories=THEORY, criticality=Criticality.Warning) def volume_fraction_bound(design: NDArray, volfrac: float) -> None: