|  | 
| 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 | 
 | 
| @@ -1082,27 +1079,91 @@ def test_rolling_sem(frame_or_series): | 
| 1082 | 1079 |     tm.assert_series_equal(result, expected) | 
| 1083 | 1080 | 
 | 
| 1084 | 1081 | 
 | 
| 1085 |  | -@pytest.mark.xfail( | 
| 1086 |  | -    is_platform_arm() or is_platform_power() or is_platform_riscv64(), | 
| 1087 |  | -    reason="GH 38921", | 
| 1088 |  | -) | 
| 1089 | 1082 | @pytest.mark.parametrize( | 
| 1090 |  | -    ("func", "third_value", "values"), | 
|  | 1083 | +    ("func", "values", "window", "ddof", "expected_values"), | 
| 1091 | 1084 |     [ | 
| 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]), | 
|  | 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 | +        ), | 
| 1096 | 1154 |     ], | 
| 1097 | 1155 | ) | 
| 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) | 
|  | 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) | 
| 1104 | 1166 |     # GH 42064 | 
| 1105 |  | -    # new `roll_var` will output 0.0 correctly | 
| 1106 | 1167 |     tm.assert_series_equal(result == 0, expected == 0) | 
| 1107 | 1168 | 
 | 
| 1108 | 1169 | 
 | 
|  | 
0 commit comments