@@ -25,6 +25,7 @@ def simple_data():
25
25
def long_data ():
26
26
return pd .DataFrame (
27
27
{
28
+ "time" : [0 , 1 , 2 , 3 , 4 ],
28
29
"A" : [1 , 2 , 3 , 4 , 5 ],
29
30
"B" : [5 , 4 , 3 , 2 , 1 ],
30
31
}
@@ -33,7 +34,9 @@ def long_data():
33
34
34
35
@pytest .fixture
35
36
def stationary_data ():
36
- return pd .DataFrame ({"A" : [1 , 1 , 1 , 1 , 1 ], "B" : [2 , 2 , 2 , 2 , 2 ]})
37
+ return pd .DataFrame (
38
+ {"time" : [0 , 1 , 2 , 3 , 4 ], "A" : [1 , 1 , 1 , 1 , 1 ], "B" : [2 , 2 , 2 , 2 , 2 ]}
39
+ )
37
40
38
41
39
42
@pytest .fixture
@@ -48,6 +51,11 @@ def nan_data():
48
51
return pd .DataFrame ({"A" : [None , None , None ]})
49
52
50
53
54
+ @pytest .fixture
55
+ def no_valid_data ():
56
+ return pd .DataFrame ({"time" : [0 , 1 ], "A" : [1 , 2 ]})
57
+
58
+
51
59
# Test DataStream initialization
52
60
# =============================================================================
53
61
@@ -196,6 +204,14 @@ def test_trim_invalid_method(trim_data):
196
204
ds .trim (column_name = "A" , method = "invalid_method" )
197
205
198
206
207
+ def test_trim_missing_threshold (long_data ):
208
+ ds = DataStream (long_data )
209
+ with pytest .raises (
210
+ ValueError , match = "Threshold must be specified for the 'threshold' method."
211
+ ):
212
+ ds .trim (column_name = "A" , method = "threshold" )
213
+
214
+
199
215
# Test Compute Statistics
200
216
# =============================================================================
201
217
@@ -453,3 +469,89 @@ def test_is_not_stationary(long_data):
453
469
expected = {"A" : False }
454
470
print (not_stationary )
455
471
assert not_stationary == expected
472
+
473
+
474
+ # Test Head
475
+ # =============================================================================
476
+
477
+
478
+ def test_head (long_data ):
479
+ ds = DataStream (long_data )
480
+ result = ds .head (5 )
481
+ expected = pd .DataFrame (
482
+ {
483
+ "time" : [0 , 1 , 2 , 3 , 4 ],
484
+ "A" : [1 , 2 , 3 , 4 , 5 ],
485
+ "B" : [5 , 4 , 3 , 2 , 1 ],
486
+ }
487
+ )
488
+ pd .testing .assert_frame_equal (result , expected )
489
+
490
+
491
+ # Test Process Column
492
+ # =============================================================================
493
+
494
+
495
+ def test_process_column_missing_method (simple_data ):
496
+ ds = DataStream (simple_data )
497
+ with pytest .raises (
498
+ ValueError , match = "Invalid method. Choose 'sliding' or 'non-overlapping'."
499
+ ):
500
+ ds ._process_column (column_data = "A" , estimated_window = 1 , method = "invalid_method" )
501
+
502
+
503
+ # Test Find Steady State Std
504
+ # =============================================================================
505
+
506
+
507
+ def test_find_steady_state_std (trim_data ):
508
+ ds = DataStream (trim_data )
509
+ result = ds .find_steady_state_std (data = ds .df , column_name = "A" , window_size = 1 )
510
+ expected = 0
511
+ assert result == expected
512
+
513
+
514
+ def test_find_steady_state_std_non_robust (trim_data ):
515
+ ds = DataStream (trim_data )
516
+ result = ds .find_steady_state_std (
517
+ data = ds .df , column_name = "A" , window_size = 2 , robust = False
518
+ )
519
+ expected = 3
520
+ assert result == expected
521
+
522
+
523
+ def test_find_steady_state_not_valid (no_valid_data ):
524
+ ds = DataStream (no_valid_data )
525
+ result = ds .find_steady_state_std (
526
+ data = ds .df , column_name = ["time" , "A" ], window_size = 1
527
+ )
528
+ assert result is None
529
+
530
+
531
+ # Test Find Steady State Rolling Variance
532
+ # =============================================================================
533
+
534
+
535
+ def test_find_steady_state_rolling_variance_stationary (stationary_data ):
536
+ ds = DataStream (stationary_data )
537
+ result = ds .find_steady_state_rolling_variance (
538
+ data = ds .df , column_name = "A" , window_size = 3
539
+ )
540
+ print (result )
541
+ assert result is None
542
+
543
+
544
+ def test_find_steady_state_none_rolling_variance (long_data ):
545
+ ds = DataStream (long_data )
546
+ result = ds .find_steady_state_rolling_variance (
547
+ data = long_data , column_name = "A" , window_size = 3 , threshold = 0.1
548
+ )
549
+ assert result is None
550
+
551
+
552
+ def test_find_steady_state_rolling_variance_not_valid (no_valid_data ):
553
+ ds = DataStream (no_valid_data )
554
+ result = ds .find_steady_state_rolling_variance (
555
+ data = ds .df , column_name = "A" , window_size = 1
556
+ )
557
+ assert result is None
0 commit comments