Skip to content

Commit 696f7ee

Browse files
committed
Name-mangle dependency_id.
1 parent afbe207 commit 696f7ee

File tree

4 files changed

+20
-20
lines changed

4 files changed

+20
-20
lines changed

src/easyscience/variable/descriptor_number.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ def __init__(
6868
self._observers: List[DescriptorNumber] = []
6969

7070
# Extract dependency_id if provided during deserialization
71-
if '_dependency_id' in kwargs:
72-
self._dependency_id = kwargs.pop('_dependency_id')
71+
if '__dependency_id' in kwargs:
72+
self.__dependency_id = kwargs.pop('__dependency_id')
7373

7474
if not isinstance(value, numbers.Number) or isinstance(value, bool):
7575
raise TypeError(f'{value=} must be a number')
@@ -118,14 +118,14 @@ def from_scipp(cls, name: str, full_value: Variable, **kwargs) -> DescriptorNumb
118118
def _attach_observer(self, observer: DescriptorNumber) -> None:
119119
"""Attach an observer to the descriptor."""
120120
self._observers.append(observer)
121-
if not hasattr(self, '_dependency_id'):
122-
self._dependency_id = str(uuid.uuid4())
121+
if not hasattr(self, '_DescriptorNumber__dependency_id'):
122+
self.__dependency_id = str(uuid.uuid4())
123123

124124
def _detach_observer(self, observer: DescriptorNumber) -> None:
125125
"""Detach an observer from the descriptor."""
126126
self._observers.remove(observer)
127127
if not self._observers:
128-
del self._dependency_id
128+
del self.__dependency_id
129129

130130
def _notify_observers(self) -> None:
131131
"""Notify all observers of a change."""
@@ -333,8 +333,8 @@ def as_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
333333
raw_dict['value'] = self._scalar.value
334334
raw_dict['unit'] = str(self._scalar.unit)
335335
raw_dict['variance'] = self._scalar.variance
336-
if hasattr(self, '_dependency_id'):
337-
raw_dict['_dependency_id'] = self._dependency_id
336+
if hasattr(self, '_DescriptorNumber__dependency_id'):
337+
raw_dict['__dependency_id'] = self.__dependency_id
338338
return raw_dict
339339

340340
def __add__(self, other: Union[DescriptorNumber, numbers.Number]) -> DescriptorNumber:

src/easyscience/variable/parameter.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ def as_dict(self, skip: Optional[List[str]] = None) -> Dict[str, Any]:
544544
# Convert dependency_map to use dependency_ids
545545
raw_dict['_dependency_map_dependency_ids'] = {}
546546
for key, obj in self._dependency_map.items():
547-
raw_dict['_dependency_map_dependency_ids'][key] = obj._dependency_id
547+
raw_dict['_dependency_map_dependency_ids'][key] = obj._DescriptorNumber__dependency_id
548548

549549
return raw_dict
550550

@@ -983,7 +983,7 @@ 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, '_dependency_id') and obj._dependency_id == dependency_id:
986+
if isinstance(obj, DescriptorNumber) and hasattr(obj, '_DescriptorNumber__dependency_id') and obj._DescriptorNumber__dependency_id == dependency_id:
987987
return obj
988988
return None
989989

src/easyscience/variable/parameter_dependency_resolver.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def _collect_parameters(item: Any, parameters: List[Parameter]) -> None:
6767
resolved_count += 1
6868
except Exception as e:
6969
error_count += 1
70-
dependency_id = getattr(param, '_dependency_id', 'unknown')
70+
dependency_id = getattr(param, '_DescriptorNumber__dependency_id', 'unknown')
7171
errors.append(f"Failed to resolve dependencies for parameter '{param.name}'" \
7272
f" (unique_name: '{param.unique_name}', dependency_id: '{dependency_id}'): {e}")
7373

tests/unit_tests/variable/test_parameter_dependency_serialization.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ def test_dependent_parameter_serialization(self, clear_global_map):
7171

7272
# Should contain dependency information
7373
assert serialized['_dependency_string'] == "2 * a"
74-
assert serialized['_dependency_map_dependency_ids'] == {"a": a._dependency_id}
74+
assert serialized['_dependency_map_dependency_ids'] == {"a": a._DescriptorNumber__dependency_id}
7575
assert serialized['_independent'] is False
7676

7777
# Deserialize
@@ -81,7 +81,7 @@ def test_dependent_parameter_serialization(self, clear_global_map):
8181
# Should have pending dependency info
8282
assert hasattr(new_b, '_pending_dependency_string')
8383
assert new_b._pending_dependency_string == "2 * a"
84-
assert new_b._pending_dependency_map_dependency_ids == {"a": a._dependency_id}
84+
assert new_b._pending_dependency_map_dependency_ids == {"a": a._DescriptorNumber__dependency_id}
8585
assert new_b.independent is True # Initially independent until dependencies resolved
8686

8787
def test_dependency_resolution_after_deserialization(self, clear_global_map):
@@ -150,7 +150,7 @@ def test_unique_name_dependency_serialization(self, clear_global_map):
150150
# Should contain unique name mapping
151151
assert b_serialized['_dependency_string'] == '2 * "Parameter_0"'
152152
assert "__Parameter_0__" in b_serialized['_dependency_map_dependency_ids']
153-
assert b_serialized['_dependency_map_dependency_ids']["__Parameter_0__"] == a._dependency_id
153+
assert b_serialized['_dependency_map_dependency_ids']["__Parameter_0__"] == a._DescriptorNumber__dependency_id
154154

155155
# Deserialize both and resolve
156156
global_object.map._clear()
@@ -350,8 +350,8 @@ def test_dependency_id_system_order_independence(self, clear_global_map, order):
350350
assert z.value == 50.0 # 5 * 10
351351

352352
# Get dependency IDs
353-
x_dep_id = x._dependency_id
354-
y_dep_id = y._dependency_id
353+
x_dep_id = x._DescriptorNumber__dependency_id
354+
y_dep_id = y._DescriptorNumber__dependency_id
355355

356356
# Serialize all parameters
357357
params_data = {
@@ -361,9 +361,9 @@ def test_dependency_id_system_order_independence(self, clear_global_map, order):
361361
}
362362

363363
# Verify dependency IDs are in serialized data
364-
assert params_data["x"]["_dependency_id"] == x_dep_id
365-
assert params_data["y"]["_dependency_id"] == y_dep_id
366-
assert "_dependency_id" not in params_data["z"]
364+
assert params_data["x"]["__dependency_id"] == x_dep_id
365+
assert params_data["y"]["__dependency_id"] == y_dep_id
366+
assert "__dependency_id" not in params_data["z"]
367367
assert "_dependency_map_dependency_ids" in params_data["z"]
368368

369369
# THEN
@@ -376,8 +376,8 @@ def test_dependency_id_system_order_independence(self, clear_global_map, order):
376376

377377
# EXPECT
378378
# Verify dependency IDs are preserved
379-
assert new_params["x"]._dependency_id == x_dep_id
380-
assert new_params["y"]._dependency_id == y_dep_id
379+
assert new_params["x"]._DescriptorNumber__dependency_id == x_dep_id
380+
assert new_params["y"]._DescriptorNumber__dependency_id == y_dep_id
381381

382382
# Resolve dependencies
383383
resolve_all_parameter_dependencies(new_params)

0 commit comments

Comments
 (0)