diff --git a/src/easyscience/Objects/new_variable/descriptor_number.py b/src/easyscience/Objects/new_variable/descriptor_number.py index 4fd25709..95c6fc5e 100644 --- a/src/easyscience/Objects/new_variable/descriptor_number.py +++ b/src/easyscience/Objects/new_variable/descriptor_number.py @@ -101,7 +101,7 @@ def full_value(self) -> Variable: @full_value.setter def full_value(self, full_value: Variable) -> None: - raise AttributeError(f'Full_value is read-only. Change the value and variance seperately. or create a new {self.__class__.__name__}.') # noqa: E501 + raise AttributeError(f'Full_value is read-only. Change the value and variance seperately. Or create a new {self.__class__.__name__}.') # noqa: E501 @property def value(self) -> numbers.Number: @@ -122,7 +122,7 @@ def value(self, value: numbers.Number) -> None: """ if not isinstance(value, numbers.Number) or isinstance(value, bool): raise TypeError(f'{value=} must be a number') - self._scalar.value = value + self._scalar.value = float(value) @property def unit(self) -> str: diff --git a/src/easyscience/Objects/new_variable/parameter.py b/src/easyscience/Objects/new_variable/parameter.py index b48f6a91..56dad214 100644 --- a/src/easyscience/Objects/new_variable/parameter.py +++ b/src/easyscience/Objects/new_variable/parameter.py @@ -147,24 +147,8 @@ def full_value(self) -> Variable: return self._scalar @full_value.setter - @property_stack_deco def full_value(self, scalar: Variable) -> None: - """ - Set the value of self. This creates a scipp scalar with a unit. - - :param full_value: New value of self - """ - if not self.enabled: - if global_object.debug: - raise CoreSetException(f'{str(self)} is not enabled.') - return - if not isinstance(scalar, Variable) and len(scalar.dims) == 0: - raise TypeError(f'{scalar=} must be a Scipp scalar') - if not isinstance(scalar.value, numbers.Number) or isinstance(scalar.value, bool): - raise TypeError('value of Scipp scalar must be a number') - self._scalar = scalar - if self._callback.fset is not None: - self._callback.fset(scalar) + raise AttributeError(f'Full_value is read-only. Change the value and variance seperately. Or create a new {self.__class__.__name__}.') # noqa: E501 @property def value(self) -> numbers.Number: @@ -215,7 +199,7 @@ def value(self, value: numbers.Number) -> None: value = self._constraint_runner(self._constraints.virtual, value) - self._scalar.value = value + self._scalar.value = float(value) if self._callback.fset is not None: self._callback.fset(self._scalar.value) diff --git a/tests/unit_tests/Objects/new_variable/test_parameter.py b/tests/unit_tests/Objects/new_variable/test_parameter.py index 017e76bd..5269d81b 100644 --- a/tests/unit_tests/Objects/new_variable/test_parameter.py +++ b/tests/unit_tests/Objects/new_variable/test_parameter.py @@ -292,15 +292,9 @@ def test_full_value_no_match_callback(self, parameter: Parameter): assert parameter._callback.fget.call_count == 1 def test_set_full_value(self, parameter: Parameter): - # When - self.mock_callback.fget.return_value = sc.scalar(1, unit='m') - - # Then - parameter.full_value = sc.scalar(2, unit='m') - - # Expect - parameter._callback.fset.assert_called_once_with(sc.scalar(2, unit='m')) - assert parameter._scalar == sc.scalar(2, unit='m') + # When Then Expect + with pytest.raises(AttributeError): + parameter.full_value = sc.scalar(2, unit='s') def test_copy(self, parameter: Parameter): # When Then