From 0a8033f1d28e163d4445d9851631ae28c872c901 Mon Sep 17 00:00:00 2001 From: VsevolodX Date: Fri, 19 Jun 2026 10:26:28 -0700 Subject: [PATCH] update: sync Py convergence with Js --- .../mat3ra/wode/subworkflows/convergence_mixin.py | 8 +++++--- tests/py/test_convergence.py | 13 ++++++------- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/py/mat3ra/wode/subworkflows/convergence_mixin.py b/src/py/mat3ra/wode/subworkflows/convergence_mixin.py index a6ccc1a5..69f272f1 100644 --- a/src/py/mat3ra/wode/subworkflows/convergence_mixin.py +++ b/src/py/mat3ra/wode/subworkflows/convergence_mixin.py @@ -48,10 +48,12 @@ def convergence_series(self, scope_track: Optional[List[Dict[str, Any]]]) -> Lis last_result = object() series: List[Dict[str, Any]] = [] + accumulated_global: Dict[str, Any] = {} for scope_item in scope_track: - global_scope = ((scope_item or {}).get("scope") or {}).get("global") or {} - parameter = global_scope.get(self.convergence_parameter) - result = global_scope.get(self.convergence_result) + item_global = ((scope_item or {}).get("scope") or {}).get("global") or {} + accumulated_global = {**accumulated_global, **item_global} + parameter = accumulated_global.get(self.convergence_parameter) + result = accumulated_global.get(self.convergence_result) is_new_result = result is not None and result != last_result last_result = result if is_new_result: diff --git a/tests/py/test_convergence.py b/tests/py/test_convergence.py index 6e1e20a2..c33c7be2 100644 --- a/tests/py/test_convergence.py +++ b/tests/py/test_convergence.py @@ -173,8 +173,8 @@ def test_lattice_reciprocal_vector_ratios(): assert lattice.reciprocal_vector_ratios == [1.0, 0.5, 0.25] -def test_convergence_series_uses_scope_track(): subworkflow = _build_total_energy_subworkflow() + n_k = ConvergenceParameterNameEnum.N_k.value subworkflow.add_convergence( parameter=ConvergenceParameterNameEnum.N_k, @@ -186,15 +186,14 @@ def test_convergence_series_uses_scope_track(): ) scope_track = [ - {"scope": {"global": {ConvergenceParameterNameEnum.N_k.value: 1, "total_energy": -10.0}}}, - {"scope": {"global": {ConvergenceParameterNameEnum.N_k.value: 1, "total_energy": -10.0}}}, - {"scope": {"global": {ConvergenceParameterNameEnum.N_k.value: 2, "total_energy": -10.5}}}, - {"scope": {"global": {ConvergenceParameterNameEnum.N_k.value: 3}}}, + {"scope": {"global": {n_k: 12, "total_energy": -100}}}, + {"scope": {"global": {"total_energy": -98}}}, + {"scope": {"global": {n_k: 36}}}, ] assert subworkflow.convergence_series(scope_track) == [ - {"x": 1, "parameter": 1, "y": -10.0}, - {"x": 2, "parameter": 2, "y": -10.5}, + {"x": 1, "parameter": 12, "y": -100}, + {"x": 2, "parameter": 12, "y": -98}, ]