|  | 
| 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