Skip to content

Commit b189bc4

Browse files
authored
Merge pull request #14 from iterorganization/feature/refactor-derivatives
Allow getting derivative at arbitrary time points in tendency
2 parents 81bd7aa + 90e700e commit b189bc4

23 files changed

+452
-429
lines changed

tests/tendencies/periodic/test_periodic_base.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from unittest.mock import patch
2+
13
import numpy as np
24
import pytest
35
from pytest import approx
@@ -6,6 +8,16 @@
68
from waveform_editor.tendencies.periodic.periodic_base import PeriodicBaseTendency
79

810

11+
@pytest.fixture(autouse=True)
12+
def patch_periodic_base_tendency():
13+
arr = np.array([0])
14+
with (
15+
patch.object(PeriodicBaseTendency, "get_value", return_value=(arr, arr)),
16+
patch.object(PeriodicBaseTendency, "get_derivative", return_value=arr),
17+
):
18+
yield
19+
20+
921
@pytest.mark.parametrize(
1022
"base, amplitude, min, max, expected_base, expected_amplitude, has_error",
1123
[

tests/tendencies/periodic/test_sawtooth_wave.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ def test_start_and_end():
1111
tendency = SawtoothWaveTendency(
1212
user_duration=1, user_base=0, user_amplitude=1, user_frequency=1
1313
)
14-
assert tendency.get_start_value() == approx(0)
15-
assert tendency.get_end_value() == approx(0)
16-
assert tendency.get_derivative_start() == approx(2)
17-
assert tendency.get_derivative_end() == approx(2)
14+
assert tendency.start_value == approx(0)
15+
assert tendency.end_value == approx(0)
16+
assert tendency.start_derivative == approx(2)
17+
assert tendency.end_derivative == approx(2)
1818

1919
tendency = SawtoothWaveTendency(
2020
user_duration=1,
@@ -23,10 +23,10 @@ def test_start_and_end():
2323
user_frequency=1,
2424
user_phase=np.pi / 2,
2525
)
26-
assert tendency.get_start_value() == approx(0.5)
27-
assert tendency.get_end_value() == approx(0.5)
28-
assert tendency.get_derivative_start() == approx(2)
29-
assert tendency.get_derivative_end() == approx(2)
26+
assert tendency.start_value == approx(0.5)
27+
assert tendency.end_value == approx(0.5)
28+
assert tendency.start_derivative == approx(2)
29+
assert tendency.end_derivative == approx(2)
3030

3131
tendency = SawtoothWaveTendency(
3232
user_duration=1,
@@ -35,10 +35,10 @@ def test_start_and_end():
3535
user_frequency=1,
3636
user_phase=np.pi / 4,
3737
)
38-
assert tendency.get_start_value() == approx(0.25)
39-
assert tendency.get_end_value() == approx(0.25)
40-
assert tendency.get_derivative_start() == approx(2)
41-
assert tendency.get_derivative_end() == approx(2)
38+
assert tendency.start_value == approx(0.25)
39+
assert tendency.end_value == approx(0.25)
40+
assert tendency.start_derivative == approx(2)
41+
assert tendency.end_derivative == approx(2)
4242

4343

4444
def test_generate():
@@ -53,6 +53,6 @@ def test_generate():
5353
user_phase=np.pi / 2,
5454
user_frequency=1,
5555
)
56-
time, values = tendency.generate()
56+
time, values = tendency.get_value()
5757
assert np.allclose(time, [0, 0.25, 0.25, 1])
5858
assert np.allclose(values, [4.5, 6, 0, 4.5])

tests/tendencies/periodic/test_sine_wave.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ def test_start_and_end():
1111
tendency = SineWaveTendency(
1212
user_duration=1, user_base=0, user_amplitude=1, user_frequency=1
1313
)
14-
assert tendency.get_start_value() == approx(0)
15-
assert tendency.get_end_value() == approx(0)
16-
assert tendency.get_derivative_start() == approx(2 * np.pi)
17-
assert tendency.get_derivative_end() == approx(2 * np.pi)
14+
assert tendency.start_value == approx(0)
15+
assert tendency.end_value == approx(0)
16+
assert tendency.start_derivative == approx(2 * np.pi)
17+
assert tendency.end_derivative == approx(2 * np.pi)
1818

1919
tendency = SineWaveTendency(
2020
user_duration=1,
@@ -23,10 +23,10 @@ def test_start_and_end():
2323
user_frequency=1,
2424
user_phase=np.pi / 2,
2525
)
26-
assert tendency.get_start_value() == approx(1)
27-
assert tendency.get_end_value() == approx(1)
28-
assert tendency.get_derivative_start() == approx(0)
29-
assert tendency.get_derivative_end() == approx(0)
26+
assert tendency.start_value == approx(1)
27+
assert tendency.end_value == approx(1)
28+
assert tendency.start_derivative == approx(0)
29+
assert tendency.end_derivative == approx(0)
3030

3131
tendency = SineWaveTendency(
3232
user_duration=1,
@@ -35,10 +35,10 @@ def test_start_and_end():
3535
user_frequency=1,
3636
user_phase=np.pi,
3737
)
38-
assert tendency.get_start_value() == approx(0)
39-
assert tendency.get_end_value() == approx(0)
40-
assert tendency.get_derivative_start() == approx(-2 * np.pi)
41-
assert tendency.get_derivative_end() == approx(-2 * np.pi)
38+
assert tendency.start_value == approx(0)
39+
assert tendency.end_value == approx(0)
40+
assert tendency.start_derivative == approx(-2 * np.pi)
41+
assert tendency.end_derivative == approx(-2 * np.pi)
4242

4343

4444
def test_generate():
@@ -48,7 +48,7 @@ def test_generate():
4848
tendency = SineWaveTendency(
4949
user_start=0, user_duration=1, user_base=2, user_amplitude=3, user_phase=1
5050
)
51-
time, values = tendency.generate()
51+
time, values = tendency.get_value()
5252
assert np.all(time == np.linspace(0, 1, 101))
5353
assert np.allclose(values, 2 + 3 * np.sin(2 * np.pi * time + 1))
5454

tests/tendencies/periodic/test_square_wave.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,18 @@ def test_start_and_end():
1010
tendency = SquareWaveTendency(
1111
user_duration=1, user_base=0, user_amplitude=1, user_frequency=1
1212
)
13-
assert tendency.get_start_value() == 1
14-
assert tendency.get_end_value() == 1
15-
assert tendency.get_derivative_start() == 0
16-
assert tendency.get_derivative_end() == 0
13+
assert tendency.start_value == 1
14+
assert tendency.end_value == 1
15+
assert tendency.start_derivative == 0
16+
assert tendency.end_derivative == 0
1717

1818
tendency = SquareWaveTendency(
1919
user_duration=1.75, user_base=0, user_amplitude=1, user_frequency=1
2020
)
21-
assert tendency.get_start_value() == 1
22-
assert tendency.get_end_value() == -1
23-
assert tendency.get_derivative_start() == 0
24-
assert tendency.get_derivative_end() == 0
21+
assert tendency.start_value == 1
22+
assert tendency.end_value == -1
23+
assert tendency.start_derivative == 0
24+
assert tendency.end_derivative == 0
2525

2626
tendency = SquareWaveTendency(
2727
user_duration=1,
@@ -30,10 +30,10 @@ def test_start_and_end():
3030
user_frequency=1,
3131
user_phase=np.pi / 2,
3232
)
33-
assert tendency.get_start_value() == 1
34-
assert tendency.get_end_value() == 1
35-
assert tendency.get_derivative_start() == 0
36-
assert tendency.get_derivative_end() == 0
33+
assert tendency.start_value == 1
34+
assert tendency.end_value == 1
35+
assert tendency.start_derivative == 0
36+
assert tendency.end_derivative == 0
3737

3838
tendency = SquareWaveTendency(
3939
user_duration=1,
@@ -42,10 +42,10 @@ def test_start_and_end():
4242
user_frequency=1,
4343
user_phase=1.5 * np.pi,
4444
)
45-
assert tendency.get_start_value() == -1
46-
assert tendency.get_end_value() == -1
47-
assert tendency.get_derivative_start() == 0
48-
assert tendency.get_derivative_end() == 0
45+
assert tendency.start_value == -1
46+
assert tendency.end_value == -1
47+
assert tendency.start_derivative == 0
48+
assert tendency.end_derivative == 0
4949

5050

5151
def test_generate():
@@ -60,6 +60,6 @@ def test_generate():
6060
user_phase=np.pi / 2,
6161
user_frequency=1,
6262
)
63-
time, values = tendency.generate()
63+
time, values = tendency.get_value()
6464
assert np.allclose(time, [0, 0.25, 0.25, 0.75, 0.75, 1.25, 1.25, 1.5])
6565
assert np.allclose(values, [5, 5, -1, -1, 5, 5, -1, -1])

tests/tendencies/periodic/test_triangle_wave.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ def test_start_and_end():
1111
tendency = TriangleWaveTendency(
1212
user_duration=1, user_base=0, user_amplitude=1, user_frequency=1
1313
)
14-
assert tendency.get_start_value() == approx(0)
15-
assert tendency.get_end_value() == approx(0)
16-
assert tendency.get_derivative_start() == approx(4)
17-
assert tendency.get_derivative_end() == approx(4)
14+
assert tendency.start_value == approx(0)
15+
assert tendency.end_value == approx(0)
16+
assert tendency.start_derivative == approx(4)
17+
assert tendency.end_derivative == approx(4)
1818

1919
tendency = TriangleWaveTendency(
2020
user_duration=1,
@@ -23,10 +23,10 @@ def test_start_and_end():
2323
user_frequency=1,
2424
user_phase=np.pi / 4,
2525
)
26-
assert tendency.get_start_value() == approx(0.5)
27-
assert tendency.get_end_value() == approx(0.5)
28-
assert tendency.get_derivative_start() == approx(4)
29-
assert tendency.get_derivative_end() == approx(4)
26+
assert tendency.start_value == approx(0.5)
27+
assert tendency.end_value == approx(0.5)
28+
assert tendency.start_derivative == approx(4)
29+
assert tendency.end_derivative == approx(4)
3030

3131
tendency = TriangleWaveTendency(
3232
user_duration=1,
@@ -35,10 +35,10 @@ def test_start_and_end():
3535
user_frequency=1,
3636
user_phase=np.pi,
3737
)
38-
assert tendency.get_start_value() == approx(0)
39-
assert tendency.get_end_value() == approx(0)
40-
assert tendency.get_derivative_start() == approx(-4)
41-
assert tendency.get_derivative_end() == approx(-4)
38+
assert tendency.start_value == approx(0)
39+
assert tendency.end_value == approx(0)
40+
assert tendency.start_derivative == approx(-4)
41+
assert tendency.end_derivative == approx(-4)
4242

4343
tendency = TriangleWaveTendency(
4444
user_duration=1.5,
@@ -47,10 +47,10 @@ def test_start_and_end():
4747
user_frequency=1,
4848
user_phase=np.pi,
4949
)
50-
assert tendency.get_start_value() == approx(0)
51-
assert tendency.get_end_value() == approx(0)
52-
assert tendency.get_derivative_start() == approx(-4)
53-
assert tendency.get_derivative_end() == approx(4)
50+
assert tendency.start_value == approx(0)
51+
assert tendency.end_value == approx(0)
52+
assert tendency.start_derivative == approx(-4)
53+
assert tendency.end_derivative == approx(4)
5454

5555

5656
def test_generate():
@@ -65,6 +65,6 @@ def test_generate():
6565
user_phase=0,
6666
user_frequency=1,
6767
)
68-
time, values = tendency.generate()
68+
time, values = tendency.get_value()
6969
assert np.allclose(time, [0, 0.25, 0.75, 1.25, 1.5])
7070
assert np.allclose(values, [6, 9, 3, 9, 6])

tests/tendencies/test_constant.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,18 @@ def test_start_and_end():
4646
Test the start and end values and their derivatives
4747
"""
4848
tendency = ConstantTendency(user_duration=1, user_value=5)
49-
assert tendency.get_start_value() == 5
50-
assert tendency.get_end_value() == 5
51-
assert tendency.get_derivative_start() == 0
52-
assert tendency.get_derivative_end() == 0
49+
assert tendency.start_value == 5
50+
assert tendency.end_value == 5
51+
assert tendency.start_derivative == 0
52+
assert tendency.end_derivative == 0
5353

5454

5555
def test_generate():
5656
"""
5757
Check the generated values.
5858
"""
5959
tendency = ConstantTendency(user_start=0, user_duration=1, user_value=5)
60-
time, values = tendency.generate()
60+
time, values = tendency.get_value()
6161

6262
assert np.all(time == np.array([0, 1]))
6363
assert np.all(values == np.array([5, 5]))

tests/tendencies/test_linear.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -133,18 +133,18 @@ def test_start_and_end():
133133
Test the start and end values and their derivatives
134134
"""
135135
tendency = LinearTendency(user_duration=1, user_from=1, user_rate=5)
136-
assert tendency.get_start_value() == 1
137-
assert tendency.get_end_value() == 6
138-
assert tendency.get_derivative_start() == 5
139-
assert tendency.get_derivative_end() == 5
136+
assert tendency.start_value == 1
137+
assert tendency.end_value == 6
138+
assert tendency.start_derivative == 5
139+
assert tendency.end_derivative == 5
140140

141141

142142
def test_generate():
143143
"""
144144
Check the generated values.
145145
"""
146146
tendency = LinearTendency(user_start=0, user_duration=1, user_from=1, user_to=10)
147-
time, values = tendency.generate()
147+
time, values = tendency.get_value()
148148
assert np.all(time == np.array([0, 1]))
149149
assert np.all(values == np.array([1, 10]))
150150

tests/tendencies/test_piecewise.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,10 @@ def test_start_and_end():
5959
tendency = PiecewiseLinearTendency(
6060
user_time=np.array([1, 2, 3]), user_value=np.array([2, 4, 0])
6161
)
62-
assert tendency.get_start_value() == 2
63-
assert tendency.get_end_value() == 0
64-
assert tendency.get_derivative_start() == approx(2)
65-
assert tendency.get_derivative_end() == approx(-4)
62+
assert tendency.start_value == 2
63+
assert tendency.end_value == 0
64+
assert tendency.start_derivative == approx(2)
65+
assert tendency.end_derivative == approx(-4)
6666

6767

6868
def test_generate():
@@ -72,7 +72,7 @@ def test_generate():
7272
tendency = PiecewiseLinearTendency(
7373
user_time=np.array([1, 2, 3]), user_value=np.array([2, 4, 6])
7474
)
75-
time, values = tendency.generate()
75+
time, values = tendency.get_value()
7676
assert np.all(time == [1, 2, 3])
7777
assert np.all(values == [2, 4, 6])
7878

@@ -84,12 +84,12 @@ def test_generate_interpolate():
8484
tendency = PiecewiseLinearTendency(
8585
user_time=np.array([1, 2, 3]), user_value=np.array([2, 4, 8])
8686
)
87-
time, values = tendency.generate(time=[1.0, 1.5, 2.0, 2.5, 3.0])
87+
time, values = tendency.get_value(time=[1.0, 1.5, 2.0, 2.5, 3.0])
8888
assert np.all(time == [1.0, 1.5, 2.0, 2.5, 3.0])
8989
assert np.allclose(values, [2.0, 3.0, 4.0, 6.0, 8.0])
9090

9191
with pytest.raises(ValueError):
92-
time, values = tendency.generate(time=[0.5, 1.5, 2.0, 2.5, 3.0])
92+
time, values = tendency.get_value(time=[0.5, 1.5, 2.0, 2.5, 3.0])
9393

9494
with pytest.raises(ValueError):
95-
time, values = tendency.generate(time=[1.0, 1.5, 2.0, 2.5, 3.5])
95+
time, values = tendency.get_value(time=[1.0, 1.5, 2.0, 2.5, 3.5])

tests/tendencies/test_repeat.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ def test_repeated_values(repeat_waveform):
6363
"""Test if generated values are correct."""
6464
repeat_tendency = RepeatTendency(**repeat_waveform)
6565
times = np.linspace(0, 8, 17)
66-
_, values = repeat_tendency.generate(times)
66+
_, values = repeat_tendency.get_value(times)
6767
check_values_at_times([0, 2.5, 5, 7.5], times, values, 1)
6868
check_values_at_times([0.5, 3, 5.5, 8], times, values, 1.5)
6969
check_values_at_times([1, 3.5, 6], times, values, 2)

0 commit comments

Comments
 (0)