Skip to content

Commit 80c7ea0

Browse files
committed
updated tests and optimization code to import from the new locations, changed name of the general finite_difference function to be finitediff so it doesn't collide with the module name, updated the basic usage notebook to be more in line with the new structure, reran everything
1 parent 0f76bd8 commit 80c7ea0

10 files changed

Lines changed: 351 additions & 509 deletions

examples/1_basic_tutorial.ipynb

Lines changed: 280 additions & 442 deletions
Large diffs are not rendered by default.

examples/2a_optimizing_parameters_with_dxdt_known.ipynb

Lines changed: 19 additions & 18 deletions
Large diffs are not rendered by default.

examples/2b_optimizing_parameters_with_dxdt_unknown.ipynb

Lines changed: 22 additions & 21 deletions
Large diffs are not rendered by default.

pynumdiff/__init__.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
"""Import useful functions from all modules
22
"""
3-
from pynumdiff._version import __version__
4-
from pynumdiff.finite_difference import finite_difference, first_order, second_order, fourth_order
5-
from pynumdiff.smooth_finite_difference import mediandiff, meandiff, gaussiandiff,\
6-
friedrichsdiff, butterdiff
7-
from pynumdiff.polynomial_fit import splinediff, polydiff, savgoldiff
8-
from pynumdiff.total_variation_regularization import tvrdiff, velocity, acceleration, jerk,\
9-
iterative_velocity, smooth_acceleration, jerk_sliding
10-
from pynumdiff.linear_model import lineardiff, spectraldiff
11-
from pynumdiff.kalman_smooth import rts_const_deriv, constant_velocity, constant_acceleration, constant_jerk,\
12-
known_dynamics
3+
from ._version import __version__
4+
5+
from .finite_difference import finitediff, first_order, second_order, fourth_order
6+
from .smooth_finite_difference import meandiff, mediandiff, gaussiandiff, friedrichsdiff, butterdiff
7+
from .polynomial_fit import splinediff, polydiff, savgoldiff
8+
from .total_variation_regularization import tvrdiff, velocity, acceleration, jerk, iterative_velocity, smooth_acceleration, jerk_sliding
9+
from .kalman_smooth import rts_const_deriv, constant_velocity, constant_acceleration, constant_jerk, known_dynamics
10+
from .linear_model import spectraldiff, lineardiff
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""This module implements some common finite difference schemes
22
"""
3-
from ._finite_difference import finite_difference, first_order, second_order, fourth_order
3+
from ._finite_difference import finitediff, first_order, second_order, fourth_order

pynumdiff/finite_difference/_finite_difference.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from warnings import warn
55

66

7-
def finite_difference(x, dt, num_iterations, order):
7+
def finitediff(x, dt, num_iterations, order):
88
"""Perform iterated finite difference of a given order. This serves as the common backing function for
99
all other methods in this module.
1010
@@ -85,7 +85,7 @@ def first_order(x, dt, params=None, options={}, num_iterations=1):
8585
warn("`params` and `options` parameters will be removed in a future version. Use `num_iterations` instead.", DeprecationWarning)
8686
num_iterations = params[0] if isinstance(params, list) else params
8787

88-
return finite_difference(x, dt, num_iterations, 1)
88+
return finitediff(x, dt, num_iterations, 1)
8989

9090

9191
def second_order(x, dt, num_iterations=1):
@@ -100,7 +100,7 @@ def second_order(x, dt, num_iterations=1):
100100
- **x_hat** -- original x if :code:`num_iterations=1`, else smoothed x that yielded dxdt_hat
101101
- **dxdt_hat** -- estimated derivative of x
102102
"""
103-
return finite_difference(x, dt, num_iterations, 2)
103+
return finitediff(x, dt, num_iterations, 2)
104104

105105

106106
def fourth_order(x, dt, num_iterations=1):
@@ -115,4 +115,4 @@ def fourth_order(x, dt, num_iterations=1):
115115
- **x_hat** -- original x if :code:`num_iterations=1`, else smoothed x that yielded dxdt_hat
116116
- **dxdt_hat** -- estimated derivative of x
117117
"""
118-
return finite_difference(x, dt, num_iterations, 4)
118+
return finitediff(x, dt, num_iterations, 4)

pynumdiff/optimize/_optimize.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@
88
from tqdm import tqdm
99

1010
from ..utils import evaluate
11-
from ..finite_difference import finite_difference, first_order, second_order, fourth_order
12-
from ..smooth_finite_difference import mediandiff, meandiff, gaussiandiff, friedrichsdiff, butterdiff, splinediff
13-
from ..linear_model import spectraldiff, polydiff, savgoldiff, lineardiff
11+
from ..finite_difference import finitediff, first_order, second_order, fourth_order
12+
from ..smooth_finite_difference import mediandiff, meandiff, gaussiandiff, friedrichsdiff, butterdiff
13+
from ..linear_model import spectraldiff, lineardiff
14+
from ..polynomial_fit import polydiff, savgoldiff, splinediff
1415
from ..total_variation_regularization import tvrdiff, velocity, acceleration, jerk, iterative_velocity, smooth_acceleration, jerk_sliding
1516
from ..kalman_smooth import rts_const_deriv, constant_velocity, constant_acceleration, constant_jerk
1617

@@ -41,9 +42,9 @@
4142
{'order': (1, 5),
4243
'gamma': (1e-3, 1000),
4344
'window_size': (15, 1000)}),
44-
finite_difference: ({'num_iterations': [5, 10, 30, 50],
45-
'order': {2, 4}}, # order is categorical here, because it can't be 3
46-
{'num_iterations': (1, 1000)}),
45+
finitediff: ({'num_iterations': [5, 10, 30, 50],
46+
'order': {2, 4}}, # order is categorical here, because it can't be 3
47+
{'num_iterations': (1, 1000)}),
4748
first_order: ({'num_iterations': [5, 10, 30, 50]},
4849
{'num_iterations': (1, 1000)}),
4950
mediandiff: ({'window_size': [5, 15, 30, 50],
@@ -236,7 +237,7 @@ def suggest_method(x, dt, dxdt_truth=None, cutoff_frequency=None):
236237
raise ValueError('Either dxdt_truth or cutoff_frequency must be provided.')
237238
tvgamma = np.exp(-1.6*np.log(cutoff_frequency) -0.71*np.log(dt) - 5.1) # See https://ieeexplore.ieee.org/document/9241009
238239

239-
methods = [finite_difference, mediandiff, meandiff, gaussiandiff, friedrichsdiff, butterdiff,
240+
methods = [finitediff, mediandiff, meandiff, gaussiandiff, friedrichsdiff, butterdiff,
240241
splinediff, spectraldiff, polydiff, savgoldiff, rts_const_deriv]
241242
try: # optionally skip some methods
242243
import cvxpy

pynumdiff/tests/test_diff_methods.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
from warnings import warn
44

55
from ..finite_difference import first_order, second_order, fourth_order
6-
from ..linear_model import lineardiff, polydiff, savgoldiff, spectraldiff
6+
from ..linear_model import lineardiff, spectraldiff
7+
from ..polynomial_fit import polydiff, savgoldiff, splinediff
78
from ..total_variation_regularization import velocity, acceleration, jerk, iterative_velocity, smooth_acceleration, jerk_sliding
89
from ..kalman_smooth import constant_velocity, constant_acceleration, constant_jerk
9-
from ..smooth_finite_difference import mediandiff, meandiff, gaussiandiff, friedrichsdiff, butterdiff, splinediff
10+
from ..smooth_finite_difference import mediandiff, meandiff, gaussiandiff, friedrichsdiff, butterdiff
1011
# Function alias for testing a case where parameters change the behavior in a big way
1112
def iterated_second_order(*args, **kwargs): return second_order(*args, **kwargs)
1213
def iterated_fourth_order(*args, **kwargs): return fourth_order(*args, **kwargs)

pynumdiff/tests/test_optimize.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import numpy as np
22
from pytest import skip
33

4-
from ..finite_difference import first_order as iterated_finite_difference # actually second order
5-
from ..smooth_finite_difference import mediandiff, meandiff, gaussiandiff, friedrichsdiff, butterdiff, splinediff
6-
from ..linear_model import spectraldiff, polydiff, savgoldiff
4+
from ..finite_difference import first_order as iterated_finite_difference
5+
from ..smooth_finite_difference import mediandiff, meandiff, gaussiandiff, friedrichsdiff, butterdiff
6+
from ..linear_model import spectraldiff
7+
from ..polynomial_fit import polydiff, savgoldiff, splinediff
78
from ..total_variation_regularization import velocity, acceleration, iterative_velocity
89
from ..optimize import optimize
910
from ..utils.simulate import pi_cruise_control

pynumdiff/total_variation_regularization/_total_variation_regularization.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,8 @@ def smooth_acceleration(x, dt, params=None, options=None, gamma=None, window_siz
228228

229229

230230
def jerk_sliding(x, dt, params=None, options=None, gamma=None, solver=None, window_size=101):
231-
"""Use convex optimization (cvxpy) to solve for the jerk total variation regularized derivative.
231+
"""Use convex optimization (cvxpy) to solve for the jerk total variation regularized derivative in a
232+
sliding window.
232233
233234
:param np.array[float] x: data to differentiate
234235
:param float dt: step size

0 commit comments

Comments
 (0)