@@ -226,14 +226,27 @@ def test_rolling_kurt_eq_value_fperr(step):
226226 assert (a [a .index >= 9 ] == - 3 ).all ()
227227 assert a [a .index < 9 ].isna ().all ()
228228
229- def test_rolling_kurt_outlier_influence (step ):
229+ @pytest .mark .parametrize ("test_len, window_size, modifiers" ,
230+ [([0 , 10 ], 5 , [[0 ,1e6 ], [3 , - 1e6 ]]),
231+ ([0 , 10 ], 5 , [[0 ,1e-6 ], [3 , 1e6 ]]),
232+ ([10 , 100 ], 20 ,[[40 , - 1e10 ], [59 , - 9e9 ]]),
233+ ([105000 , 110000 ], 200 ,[[105810 , 0 ], [109900 , - 1e6 ], [109990 , 0 ]])
234+ ]
235+ )
236+ def test_rolling_kurt_outlier_influence (test_len , window_size , modifiers ):
230237 # #61416 Extreme values causes kurtosis value to become incorrect
231- test_len = 10 #! parameterize later
232- window_size = 5 #! parameterize later
233- test_series = Series (range (test_len ))
234- test_series [0 ] = 1e6
235- test_series [3 ] = - 1e6
236- expected_series = (test_series [1 :].reindex (range (test_len )))
238+ test_series = Series (range (test_len [0 ], test_len [1 ]), index = range (test_len [0 ], test_len [1 ]))
239+ for ind , number in modifiers :
240+ test_series = test_series .replace (ind , number )
241+
242+ #minimum elements needed for "window_size" number of kurts
243+ test_len_diff = test_len [1 ] - test_len [0 ]
244+ min_elements_needed = test_len_diff - 2 * window_size + 1
245+ expected_series = (test_series [min_elements_needed :].reindex (range (test_len [0 ], test_len [1 ])))
246+
247+ print (test_series )
248+ print (expected_series )
249+
237250
238251 actual = test_series .rolling (window_size ,min_periods = 1 ).kurt ()
239252 expected = expected_series .rolling (window_size ,min_periods = 1 ).kurt ()
0 commit comments