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