|
8 | 8 |
|
9 | 9 | from pandas.compat import ( |
10 | 10 | IS64, |
11 | | - is_platform_arm, |
12 | | - is_platform_power, |
13 | | - is_platform_riscv64, |
14 | 11 | ) |
15 | 12 | from pandas.errors import Pandas4Warning |
16 | 13 |
|
@@ -1085,27 +1082,91 @@ def test_rolling_sem(frame_or_series): |
1085 | 1082 | tm.assert_series_equal(result, expected) |
1086 | 1083 |
|
1087 | 1084 |
|
1088 | | -@pytest.mark.xfail( |
1089 | | - is_platform_arm() or is_platform_power() or is_platform_riscv64(), |
1090 | | - reason="GH 38921", |
1091 | | -) |
1092 | 1085 | @pytest.mark.parametrize( |
1093 | | - ("func", "third_value", "values"), |
| 1086 | + ("func", "values", "window", "ddof", "expected_values"), |
1094 | 1087 | [ |
1095 | | - ("var", 1, [5e33, 0, 0.5, 0.5, 2, 0]), |
1096 | | - ("std", 1, [7.071068e16, 0, 0.7071068, 0.7071068, 1.414214, 0]), |
1097 | | - ("var", 2, [5e33, 0.5, 0, 0.5, 2, 0]), |
1098 | | - ("std", 2, [7.071068e16, 0.7071068, 0, 0.7071068, 1.414214, 0]), |
| 1088 | + ("var", [99999999999999999, 1, 1, 2, 3, 1, 1], 2, 1, [5e33, 0, 0.5, 0.5, 2, 0]), |
| 1089 | + ( |
| 1090 | + "std", |
| 1091 | + [99999999999999999, 1, 1, 2, 3, 1, 1], |
| 1092 | + 2, |
| 1093 | + 1, |
| 1094 | + [7.071068e16, 0, 0.7071068, 0.7071068, 1.414214, 0], |
| 1095 | + ), |
| 1096 | + ("var", [99999999999999999, 1, 2, 2, 3, 1, 1], 2, 1, [5e33, 0.5, 0, 0.5, 2, 0]), |
| 1097 | + ( |
| 1098 | + "std", |
| 1099 | + [99999999999999999, 1, 2, 2, 3, 1, 1], |
| 1100 | + 2, |
| 1101 | + 1, |
| 1102 | + [7.071068e16, 0.7071068, 0, 0.7071068, 1.414214, 0], |
| 1103 | + ), |
| 1104 | + ( |
| 1105 | + "std", |
| 1106 | + [1.2e03, 1.3e17, 1.5e17, 1.995e03, 1.990e03], |
| 1107 | + 2, |
| 1108 | + 1, |
| 1109 | + [9.192388e16, 1.414214e16, 1.060660e17, 3.535534e00], |
| 1110 | + ), |
| 1111 | + ( |
| 1112 | + "var", |
| 1113 | + [ |
| 1114 | + 0.00000000e00, |
| 1115 | + 0.00000000e00, |
| 1116 | + 3.16188252e-18, |
| 1117 | + 2.95781651e-16, |
| 1118 | + 2.23153542e-51, |
| 1119 | + 0.00000000e00, |
| 1120 | + 0.00000000e00, |
| 1121 | + 5.39943432e-48, |
| 1122 | + 1.38206260e-73, |
| 1123 | + 0.00000000e00, |
| 1124 | + ], |
| 1125 | + 3, |
| 1126 | + 1, |
| 1127 | + [ |
| 1128 | + 3.33250036e-036, |
| 1129 | + 2.88538519e-032, |
| 1130 | + 2.88538519e-032, |
| 1131 | + 2.91622617e-032, |
| 1132 | + 1.65991678e-102, |
| 1133 | + 9.71796366e-096, |
| 1134 | + 9.71796366e-096, |
| 1135 | + 9.71796366e-096, |
| 1136 | + ], |
| 1137 | + ), |
| 1138 | + ( |
| 1139 | + "std", |
| 1140 | + [1, -1, 0, 1, 3, 2, -2, 10000000000, 1, 2, 0, -2, 1, 3, 0, 1], |
| 1141 | + 6, |
| 1142 | + 1, |
| 1143 | + [ |
| 1144 | + 1.41421356e00, |
| 1145 | + 1.87082869e00, |
| 1146 | + 4.08248290e09, |
| 1147 | + 4.08248290e09, |
| 1148 | + 4.08248290e09, |
| 1149 | + 4.08248290e09, |
| 1150 | + 4.08248290e09, |
| 1151 | + 4.08248290e09, |
| 1152 | + 1.72240142e00, |
| 1153 | + 1.75119007e00, |
| 1154 | + 1.64316767e00, |
| 1155 | + ], |
| 1156 | + ), |
1099 | 1157 | ], |
1100 | 1158 | ) |
1101 | | -def test_rolling_var_numerical_issues(func, third_value, values): |
1102 | | - # GH: 37051 |
1103 | | - ds = Series([99999999999999999, 1, third_value, 2, 3, 1, 1]) |
1104 | | - result = getattr(ds.rolling(2), func)() |
1105 | | - expected = Series([np.nan] + values) |
1106 | | - tm.assert_series_equal(result, expected) |
| 1159 | +def test_rolling_var_correctness(func, values, window, ddof, expected_values): |
| 1160 | + # GH: 37051, 42064, 54518, 52407, 47721 |
| 1161 | + ts = Series(values) |
| 1162 | + result = getattr(ts.rolling(window=window), func)(ddof=ddof) |
| 1163 | + if result.last_valid_index(): |
| 1164 | + result = result[ |
| 1165 | + result.first_valid_index() : result.last_valid_index() + 1 |
| 1166 | + ].reset_index(drop=True) |
| 1167 | + expected = Series(expected_values) |
| 1168 | + tm.assert_series_equal(result, expected, atol=1e-55) |
1107 | 1169 | # GH 42064 |
1108 | | - # new `roll_var` will output 0.0 correctly |
1109 | 1170 | tm.assert_series_equal(result == 0, expected == 0) |
1110 | 1171 |
|
1111 | 1172 |
|
|
0 commit comments