Skip to content

Commit 753fd4a

Browse files
committed
Add test for DescriptorNumber dependency serialization.
1 parent 57085e7 commit 753fd4a

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

src/easyscience/variable/parameter.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -983,7 +983,8 @@ def resolve_pending_dependencies(self) -> None:
983983
def _find_parameter_by_dependency_id(self, dependency_id: str) -> Optional['DescriptorNumber']:
984984
"""Find a parameter by its dependency_id from all parameters in the global map."""
985985
for obj in self._global_object.map._store.values():
986-
if isinstance(obj, DescriptorNumber) and hasattr(obj, '_DescriptorNumber__dependency_id') and obj._DescriptorNumber__dependency_id == dependency_id:
987-
return obj
986+
if isinstance(obj, DescriptorNumber) and hasattr(obj, '_DescriptorNumber__dependency_id'):
987+
if obj._DescriptorNumber__dependency_id == dependency_id:
988+
return obj
988989
return None
989990

tests/unit_tests/variable/test_parameter_dependency_serialization.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,50 @@ def test_multiple_dependent_parameters(self, clear_global_map):
253253
assert new_params["y"].value == 10.0 # 2 * 5
254254
assert new_params["z"].value == 15.0 # 10 + 5
255255

256+
def test_dependency_with_descriptor_number(self, clear_global_map):
257+
"""Test that dependencies involving DescriptorNumber serialize correctly."""
258+
from easyscience.variable import DescriptorNumber
259+
# When
260+
261+
x = DescriptorNumber(name="x", value=3.0, unit="m")
262+
y = Parameter(name="y", value=4.0, unit="m")
263+
z = Parameter.from_dependency(
264+
name="z",
265+
dependency_expression="x + y",
266+
dependency_map={"x": x, "y": y},
267+
)
268+
269+
# Verify original functionality
270+
assert z.value == 7.0 # 3 + 4
271+
272+
# Then
273+
# Serialize all
274+
params_data = {
275+
"x": x.as_dict(),
276+
"y": y.as_dict(),
277+
"z": z.as_dict()
278+
}
279+
# Deserialize and resolve
280+
global_object.map._clear()
281+
new_params = {}
282+
for name, data in params_data.items():
283+
if name == "x":
284+
new_params[name] = DescriptorNumber.from_dict(data)
285+
else:
286+
new_params[name] = Parameter.from_dict(data)
287+
288+
resolve_all_parameter_dependencies(new_params)
289+
290+
# Expect
291+
# Test that functionality still works
292+
assert new_params["z"].value == 7.0 # 3 + 4
293+
new_x = new_params["x"]
294+
new_y = new_params["y"]
295+
new_x.value = 4.0
296+
assert new_params["z"].value == 8.0 # 4 + 4
297+
new_y.value = 6.0
298+
assert new_params["z"].value == 10.0 # 4 + 6
299+
256300
def test_get_parameters_with_pending_dependencies(self, clear_global_map):
257301
"""Test utility function for finding parameters with pending dependencies."""
258302
# Create parameters

0 commit comments

Comments
 (0)