Skip to content

Commit 3ace9d1

Browse files
authored
Revert "58 ensure values are always floats (#62)" (#63)
1 parent b177361 commit 3ace9d1

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

src/easyscience/Objects/new_variable/descriptor_number.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def full_value(self) -> Variable:
101101

102102
@full_value.setter
103103
def full_value(self, full_value: Variable) -> None:
104-
raise AttributeError(f'Full_value is read-only. Change the value and variance seperately. Or create a new {self.__class__.__name__}.') # noqa: E501
104+
raise AttributeError(f'Full_value is read-only. Change the value and variance seperately. or create a new {self.__class__.__name__}.') # noqa: E501
105105

106106
@property
107107
def value(self) -> numbers.Number:
@@ -122,7 +122,7 @@ def value(self, value: numbers.Number) -> None:
122122
"""
123123
if not isinstance(value, numbers.Number) or isinstance(value, bool):
124124
raise TypeError(f'{value=} must be a number')
125-
self._scalar.value = float(value)
125+
self._scalar.value = value
126126

127127
@property
128128
def unit(self) -> str:

src/easyscience/Objects/new_variable/parameter.py

+18-2
Original file line numberDiff line numberDiff line change
@@ -147,8 +147,24 @@ def full_value(self) -> Variable:
147147
return self._scalar
148148

149149
@full_value.setter
150+
@property_stack_deco
150151
def full_value(self, scalar: Variable) -> None:
151-
raise AttributeError(f'Full_value is read-only. Change the value and variance seperately. Or create a new {self.__class__.__name__}.') # noqa: E501
152+
"""
153+
Set the value of self. This creates a scipp scalar with a unit.
154+
155+
:param full_value: New value of self
156+
"""
157+
if not self.enabled:
158+
if global_object.debug:
159+
raise CoreSetException(f'{str(self)} is not enabled.')
160+
return
161+
if not isinstance(scalar, Variable) and len(scalar.dims) == 0:
162+
raise TypeError(f'{scalar=} must be a Scipp scalar')
163+
if not isinstance(scalar.value, numbers.Number) or isinstance(scalar.value, bool):
164+
raise TypeError('value of Scipp scalar must be a number')
165+
self._scalar = scalar
166+
if self._callback.fset is not None:
167+
self._callback.fset(scalar)
152168

153169
@property
154170
def value(self) -> numbers.Number:
@@ -199,7 +215,7 @@ def value(self, value: numbers.Number) -> None:
199215

200216
value = self._constraint_runner(self._constraints.virtual, value)
201217

202-
self._scalar.value = float(value)
218+
self._scalar.value = value
203219
if self._callback.fset is not None:
204220
self._callback.fset(self._scalar.value)
205221

tests/unit_tests/Objects/new_variable/test_parameter.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,15 @@ def test_full_value_no_match_callback(self, parameter: Parameter):
292292
assert parameter._callback.fget.call_count == 1
293293

294294
def test_set_full_value(self, parameter: Parameter):
295-
# When Then Expect
296-
with pytest.raises(AttributeError):
297-
parameter.full_value = sc.scalar(2, unit='s')
295+
# When
296+
self.mock_callback.fget.return_value = sc.scalar(1, unit='m')
297+
298+
# Then
299+
parameter.full_value = sc.scalar(2, unit='m')
300+
301+
# Expect
302+
parameter._callback.fset.assert_called_once_with(sc.scalar(2, unit='m'))
303+
assert parameter._scalar == sc.scalar(2, unit='m')
298304

299305
def test_copy(self, parameter: Parameter):
300306
# When Then

0 commit comments

Comments
 (0)