@@ -126,6 +126,63 @@ def test_get_data_at_time_with_tolerance(self):
126126 with self .assertRaisesRegex (RuntimeError , msg ):
127127 new_data = data .get_data_at_time (- 0.01 , tolerance = 1e-3 )
128128
129+ def test_get_data_interpolate (self ):
130+ m = self ._make_model ()
131+ data_dict = {m .var [:, "A" ]: [1 , 2 , 3 ], m .var [:, "B" ]: [2 , 4 , 6 ]}
132+ data = TimeSeriesData (data_dict , m .time )
133+ new_data = data .get_interpolated_data (0.05 )
134+ self .assertEqual (ScalarData ({m .var [:, "A" ]: 1.5 , m .var [:, "B" ]: 3 }), new_data )
135+
136+ t1 = 0.05
137+ new_data = data .get_interpolated_data ([t1 ])
138+ self .assertEqual (
139+ TimeSeriesData ({m .var [:, "A" ]: [1.5 ], m .var [:, "B" ]: [3 ]}, [t1 ]), new_data
140+ )
141+
142+ new_t = [0.05 , 0.15 ]
143+ new_data = data .get_interpolated_data (new_t )
144+ self .assertEqual (
145+ TimeSeriesData ({m .var [:, "A" ]: [1.5 , 2.5 ], m .var [:, "B" ]: [3 , 5 ]}, new_t ),
146+ new_data ,
147+ )
148+
149+ def test_get_data_interpolate_range_check (self ):
150+ m = self ._make_model ()
151+ data_dict = {m .var [:, "A" ]: [1 , 2 , 3 ], m .var [:, "B" ]: [2 , 4 , 6 ]}
152+ data = TimeSeriesData (data_dict , m .time )
153+ msg = "Requesting interpolation outside data range."
154+ with self .assertRaisesRegex (RuntimeError , msg ):
155+ new_data = data .get_interpolated_data (0.2 + 1e-6 )
156+ with self .assertRaisesRegex (RuntimeError , msg ):
157+ new_data = data .get_interpolated_data (0.0 - 1e-6 )
158+ new_data = data .get_interpolated_data (0.2 + 1e-6 , tolerance = 1e-5 )
159+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "A" ]), 3 , 4 )
160+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "B" ]), 6 , 4 )
161+
162+ t1 = 0.2 + 1e-6
163+ with self .assertRaisesRegex (RuntimeError , msg ):
164+ new_data = data .get_interpolated_data ([t1 ])
165+ new_data = data .get_interpolated_data ([t1 ], tolerance = 1e-5 )
166+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "A" ])[0 ], 3 , 4 )
167+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "B" ])[0 ], 6 , 4 )
168+
169+ new_t = [0.0 - 1e-6 , 0.2 + 1e-6 ]
170+ with self .assertRaisesRegex (RuntimeError , msg ):
171+ new_data = data .get_interpolated_data (new_t )
172+ new_data = data .get_interpolated_data (new_t , tolerance = 1e-5 )
173+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "A" ])[0 ], 1 , 4 )
174+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "B" ])[0 ], 2 , 4 )
175+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "A" ])[1 ], 3 , 4 )
176+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "B" ])[1 ], 6 , 4 )
177+
178+ # check that the exact endpoints don't raise an exception with 0 tol
179+ new_t = [0.0 , 0.2 ]
180+ new_data = data .get_interpolated_data (new_t , tolerance = 0.0 )
181+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "A" ])[0 ], 1 , 4 )
182+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "B" ])[0 ], 2 , 4 )
183+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "A" ])[1 ], 3 , 4 )
184+ self .assertAlmostEqual (new_data .get_data_from_key (m .var [:, "B" ])[1 ], 6 , 4 )
185+
129186 def test_to_serializable (self ):
130187 m = self ._make_model ()
131188 data_dict = {m .var [:, "A" ]: [1 , 2 , 3 ], m .var [:, "B" ]: [2 , 4 , 6 ]}
0 commit comments