From 636aa721dca0c31ab556bf7fc67d3316dcf3154d Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Mon, 22 Dec 2025 19:01:43 +0100 Subject: [PATCH] fix: calculation with leader --- tests/test_leadership.py | 12 ++++++++++++ tiramisu/value.py | 7 ++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/tests/test_leadership.py b/tests/test_leadership.py index 7eb9c1e..8f119b0 100644 --- a/tests/test_leadership.py +++ b/tests/test_leadership.py @@ -1128,3 +1128,15 @@ def test_default_calc(): od2 = OptionDescription('root', '', [od1]) cfg = Config(od2) assert parse_od_get(cfg.value.get()) == {'od.interface0.var1': [{'od.interface0.var1': 'leader1', 'od.interface0.var2': ['leader1']}, {'od.interface0.var1': 'leader2', 'od.interface0.var2': ['leader2']}]} + + +def test_default_set_calc(): + var1 = StrOption('var1', "", multi=True, properties=frozenset({"mandatory", "novalidator", "force_store_value"})) + var2 = StrOption('var2', "", default_multi=[Calculation(calc_value, Params((ParamOption(var1))))], multi=submulti, properties=frozenset({"mandatory",})) + leader = Leadership('interface0', '', [var1, var2]) + od1 = OptionDescription('od', '', [leader]) + od2 = OptionDescription('root', '', [od1]) + cfg = Config(od2) + cfg.property.read_write() + cfg.option('od.interface0.var1').value.set(Calculation(calc_value, Params(ParamValue(['leader1', 'leader2'])))) + assert parse_od_get(cfg.value.get()) == {'od.interface0.var1': [{'od.interface0.var1': 'leader1', 'od.interface0.var2': ['leader1']}, {'od.interface0.var1': 'leader2', 'od.interface0.var2': ['leader2']}]} diff --git a/tiramisu/value.py b/tiramisu/value.py index 00f010d..0e79db8 100644 --- a/tiramisu/value.py +++ b/tiramisu/value.py @@ -318,13 +318,18 @@ class Values: elif isinstance(value, list): # copy value = value.copy() + elif isinstance(value, Calculation): + value, _has_calculation = get_calculated_value( + subconfig, + value, + ) self._setvalue( subconfig, ori_value, owner, ) if ( - "force_store_value" in setting_properties + "force_store_value" in self_properties and subconfig.option.impl_is_leader() ): leader = subconfig.option.impl_get_leadership()