@@ -44,11 +44,6 @@ def generate_rust_downsamplers() -> Iterable[AbstractDownsampler]:
4444 yield downsampler
4545
4646
47- def generate_rust_nan_downsamplers () -> Iterable [AbstractDownsampler ]:
48- for downsampler in RUST_NAN_DOWNSAMPLERS :
49- yield downsampler
50-
51-
5247def generate_all_downsamplers () -> Iterable [AbstractDownsampler ]:
5348 for downsampler in RUST_DOWNSAMPLERS + RUST_NAN_DOWNSAMPLERS + OTHER_DOWNSAMPLERS :
5449 yield downsampler
@@ -106,7 +101,7 @@ def test_rust_downsampler(downsampler: AbstractDownsampler):
106101 assert s_downsampled [- 1 ] == len (arr ) - 1
107102
108103
109- @pytest .mark .parametrize ("downsampler" , generate_rust_nan_downsamplers () )
104+ @pytest .mark .parametrize ("downsampler" , RUST_NAN_DOWNSAMPLERS )
110105def test_rust_nan_downsampler (downsampler : AbstractRustNaNDownsampler ):
111106 """Test the Rust NaN downsamplers."""
112107 datapoints = generate_nan_datapoints ()
@@ -360,3 +355,41 @@ def test_nan_minmaxlttb_downsampler():
360355 s_downsampled = NaNMinMaxLTTBDownsampler ().downsample (arr , n_out = 100 )
361356 arr_downsampled = arr [s_downsampled ]
362357 assert np .all (np .isnan (arr_downsampled [1 :- 1 ])) # first and last are not NaN
358+
359+
360+ @pytest .mark .parametrize ("downsampler" , RUST_DOWNSAMPLERS )
361+ def test_no_nans_omitted (downsampler : AbstractDownsampler ):
362+ n = 10_000
363+ y = np .arange (n , dtype = np .float64 )
364+ for i in range (1 , 100 ):
365+ y [i + 100 ] = np .nan
366+
367+ s_downsampled = downsampler .downsample (y , n_out = 1000 )
368+ assert np .all (~ np .isnan (y [s_downsampled ]))
369+ s_downsampled = downsampler .downsample (y , n_out = 1000 , parallel = True )
370+ assert np .all (~ np .isnan (y [s_downsampled ]))
371+
372+ x = np .arange (n )
373+ s_downsampled = downsampler .downsample (x , y , n_out = 1000 )
374+ assert np .all (~ np .isnan (y [s_downsampled ]))
375+ s_downsampled = downsampler .downsample (x , y , n_out = 1000 , parallel = True )
376+ assert np .all (~ np .isnan (y [s_downsampled ]))
377+
378+
379+ @pytest .mark .parametrize ("downsampler" , RUST_NAN_DOWNSAMPLERS )
380+ def tests_nans_returned (downsampler : AbstractDownsampler ):
381+ n = 10_000
382+ y = np .arange (n , dtype = np .float64 )
383+ for i in range (1 , 100 ):
384+ y [i + 100 ] = np .nan
385+
386+ s_downsampled = downsampler .downsample (y , n_out = 1000 )
387+ assert np .any (np .isnan (y [s_downsampled ]))
388+ s_downsampled = downsampler .downsample (y , n_out = 1000 , parallel = True )
389+ assert np .any (np .isnan (y [s_downsampled ]))
390+
391+ x = np .arange (n )
392+ s_downsampled = downsampler .downsample (x , y , n_out = 1000 )
393+ assert np .any (np .isnan (y [s_downsampled ]))
394+ s_downsampled = downsampler .downsample (x , y , n_out = 1000 , parallel = True )
395+ assert np .any (np .isnan (y [s_downsampled ]))
0 commit comments