11import numpy as np
22from pytest import mark , skip
33
4- #from pynumdiff.optimize.total_variation_regularization import *
5- #from pynumdiff.optimize.kalman_smooth import constant_velocity, constant_acceleration, \
6- # constant_jerk
7- from pynumdiff .utils .simulate import pi_control
8-
94from ..finite_difference import first_order as iterated_finite_difference # actually second order
105from ..smooth_finite_difference import mediandiff , meandiff , gaussiandiff , friedrichsdiff , butterdiff , splinediff
116from ..linear_model import spectraldiff , polydiff , savgoldiff
7+ from ..total_variation_regularization import velocity , acceleration , iterative_velocity
128from ..optimize import optimize
9+ from ..utils .simulate import pi_control
1310
1411
1512# simulation
@@ -51,62 +48,49 @@ def test_friedrichsdiff():
5148 assert params2 ['window_size' ] == 1
5249
5350def test_butterdiff ():
54- params1 , val1 = optimize (butterdiff , x , dt , init_conds = {'num_iterations' :1 }, tvgamma = tvgamma , dxdt_truth = dxdt_truth , opt_kwargs = { ' maxiter' : 20 } )
55- params2 , val2 = optimize (butterdiff , x , dt , init_conds = {'num_iterations' :1 }, tvgamma = 0 , dxdt_truth = None , opt_kwargs = { ' maxiter' : 20 } )
51+ params1 , val1 = optimize (butterdiff , x , dt , init_conds = {'num_iterations' :1 }, tvgamma = tvgamma , dxdt_truth = dxdt_truth , maxiter = 20 )
52+ params2 , val2 = optimize (butterdiff , x , dt , init_conds = {'num_iterations' :1 }, tvgamma = 0 , dxdt_truth = None , maxiter = 20 )
5653
5754 assert params1 ['filter_order' ] == 8
5855 np .testing .assert_almost_equal (params1 ['cutoff_freq' ], 0.161 , decimal = 3 )
5956 assert params2 ['filter_order' ] == 3
6057 np .testing .assert_almost_equal (params2 ['cutoff_freq' ], 0.99 , decimal = 3 )
6158
6259def test_splinediff ():
63- params1 , val1 = optimize (splinediff , x , dt , tvgamma = tvgamma , dxdt_truth = dxdt_truth , opt_kwargs = { ' maxiter' : 20 } )
64- params2 , val2 = optimize (splinediff , x , dt , tvgamma = 0 , dxdt_truth = None , opt_kwargs = { ' maxiter' : 20 } )
60+ params1 , val1 = optimize (splinediff , x , dt , tvgamma = tvgamma , dxdt_truth = dxdt_truth , maxiter = 20 )
61+ params2 , val2 = optimize (splinediff , x , dt , tvgamma = 0 , dxdt_truth = None , maxiter = 20 )
6562
6663 assert (params1 ['order' ], params1 ['num_iterations' ]) == (4 , 1 )
6764 np .testing .assert_almost_equal (params1 ['s' ], 0.0146 , decimal = 3 )
6865 assert (params2 ['order' ], params2 ['num_iterations' ]) == (4 , 1 )
6966 np .testing .assert_almost_equal (params2 ['s' ], 0.01 , decimal = 3 )
7067
71- # def test_iterative_velocity():
72- # params1, val1 = iterative_velocity(x, dt, params=None, tvgamma=tvgamma, dxdt_truth=dxdt_truth)
73- # params2, val2 = iterative_velocity(x, dt, params=None, tvgamma=0, dxdt_truth=None)
74- # np.testing.assert_array_less( np.abs(params1[0] - 2), 1.001)
75- # np.testing.assert_array_less( np.abs(params2[0] - 2), 1.001)
76-
77- # np.testing.assert_almost_equal(params1[1], 0.0001, decimal=4)
78- # np.testing.assert_almost_equal(params2[1], 0.0001, decimal=4)
68+ def test_iterative_velocity ():
69+ params1 , val1 = optimize (iterative_velocity , x , dt , init_conds = {'num_iterations' :1 }, tvgamma = tvgamma , dxdt_truth = dxdt_truth )
70+ params2 , val2 = optimize (iterative_velocity , x , dt , init_conds = {'num_iterations' :1 }, tvgamma = 0 , dxdt_truth = None )
7971
80- # #self.assertListEqual (params1, [2 , 0.0001] )
81- # #self.assertListEqual (params2, [2 , 0.0001] )
72+ np . testing . assert_almost_equal (params1 [ 'gamma' ] , 0.0001 , decimal = 4 )
73+ np . testing . assert_almost_equal (params2 [ 'gamma' ] , 0.0001 , decimal = 4 )
8274
83- # def test_velocity():
84- # try:
85- # import cvxpy
86- # except:
87- # pytest.skip("could not import cvxpy, skipping test_velocity", allow_module_level=True)
75+ def test_velocity ():
76+ try : import cvxpy
77+ except : skip ("could not import cvxpy, skipping test_velocity" )
8878
89- # params1, val1 = velocity(x, dt, params=None, tvgamma=tvgamma, dxdt_truth=dxdt_truth)
90- # params2, val2 = velocity(x, dt, params=None, tvgamma=0, dxdt_truth=None)
91- # param1_error = np.abs(params1[0] - 0.07218)
92- # param2_error = np.abs(params2[0] - 0.0001)
79+ params1 , val1 = optimize (velocity , x , dt , tvgamma = tvgamma , dxdt_truth = dxdt_truth , maxiter = 20 )
80+ params2 , val2 = optimize (velocity , x , dt , tvgamma = 0 , dxdt_truth = None , maxiter = 20 )
9381
94- # np.testing.assert_array_less(param1_error, 2 )
95- # np.testing.assert_array_less(param2_error, 2 )
82+ np .testing .assert_almost_equal ( params1 [ 'gamma' ], 0.0721 , decimal = 3 )
83+ np .testing .assert_almost_equal ( params2 [ 'gamma' ], 1e-4 , decimal = 4 )
9684
97- # def test_acceleration():
98- # try:
99- # import cvxpy
100- # except:
101- # pytest.skip("could not import cvxpy, skipping test_acceleration", allow_module_level=True)
85+ def test_acceleration ():
86+ try : import cvxpy
87+ except : pytest .skip ("could not import cvxpy, skipping test_acceleration" )
10288
103- # params1, val1 = acceleration(x, dt, params=None, tvgamma=tvgamma, dxdt_truth=dxdt_truth)
104- # params2, val2 = acceleration(x, dt, params=None, tvgamma=0, dxdt_truth=None)
105- # param1_error = np.abs(params1[0] - 0.1447)
106- # param2_error = np.abs(params2[0] - 0.0001)
89+ params1 , val1 = optimize (acceleration , x , dt , tvgamma = tvgamma , dxdt_truth = dxdt_truth , maxiter = 20 )
90+ params2 , val2 = optimize (acceleration , x , dt , tvgamma = 0 , dxdt_truth = None , maxiter = 20 )
10791
108- # np.testing.assert_array_less(param1_error, 2 )
109- # np.testing.assert_array_less(param2_error, 2 )
92+ np .testing .assert_almost_equal ( params1 [ 'gamma' ], 0.144 , decimal = 3 )
93+ np .testing .assert_almost_equal ( params2 [ 'gamma' ], 1e-4 , decimal = 4 )
11094
11195def test_savgoldiff ():
11296 params1 , val1 = optimize (savgoldiff , x , dt , tvgamma = tvgamma , dxdt_truth = dxdt_truth )
@@ -127,12 +111,7 @@ def test_polydiff():
127111 assert (params2 ['poly_order' ], params2 ['window_size' ]) == (4 , 10 )
128112
129113# def test_chebydiff(self):
130- # try:
131- # import pychebfun
132- # except:
133- # pytest.skip("could not import pychebfun, skipping test_chebydiff", allow_module_level=True)
134-
135- # params1, val1 = chebydiff(x, dt, params=None, tvgamma=tvgamma, dxdt_truth=dxdt_truth)
136- # params2, val2 = chebydiff(x, dt, params=None, tvgamma=0, dxdt_truth=None)
137- # self.assertListEqual(params1, [9, 108])
138- # self.assertListEqual(params2, [9, 94])
114+ # params1, val1 = optimize(chebydiff, x, dt, tvgamma=tvgamma, dxdt_truth=dxdt_truth)
115+ # params2, val2 = optimize(chebydiff, x, dt, tvgamma=0, dxdt_truth=None)
116+ # assert params1 == [9, 108]
117+ # assert params2 == [9, 94]
0 commit comments