diff --git a/tests/tendencies/test_smooth.py b/tests/tendencies/test_smooth.py index 307f6812..3cc0ba4d 100644 --- a/tests/tendencies/test_smooth.py +++ b/tests/tendencies/test_smooth.py @@ -73,7 +73,7 @@ def test_prev_and_next_value(): assert not tendency.annotations -def test_generate(): +def test_get_value(): """ Check the generated values. """ @@ -83,3 +83,15 @@ def test_generate(): assert values[0] == 3 assert values[-1] == 6 assert not tendency.annotations + + +def test_get_value_no_start(): + """ + Check the generated values when no start is provided. + """ + tendency = SmoothTendency(user_duration=8, user_from=3, user_to=6) + _, values = tendency.get_value() + + assert values[0] == 3 + assert values[-1] == 6 + assert not tendency.annotations diff --git a/waveform_editor/tendencies/smooth.py b/waveform_editor/tendencies/smooth.py index 4458de72..f41b6611 100644 --- a/waveform_editor/tendencies/smooth.py +++ b/waveform_editor/tendencies/smooth.py @@ -26,6 +26,7 @@ def __init__(self, **kwargs): self.from_ = 0.0 self.to = 0.0 super().__init__(**kwargs) + self._update_values() def get_value( self, time: Optional[np.ndarray] = None @@ -46,6 +47,12 @@ def get_value( time = np.linspace(float(self.start), float(self.end), num_steps) values = self.spline(time) + + if np.any(np.isnan(values)): + raise ValueError( + "A spline was generated at a time outside of its generated time range." + ) + return time, values def get_derivative(self, time: np.ndarray) -> np.ndarray: @@ -110,6 +117,7 @@ def _update_values(self): [self.start, self.end], [from_, to], bc_type=((1, d_start), (1, d_end)), + extrapolate=False, ) values_changed = (