1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
|
Description: numexpr 2.13.1 removed some warnings
Origin: upstream 5fc3df37d772befbdba7cc2bd3e9ce572fe607c0
Author: Álvaro Kothe
Forwarded: not-needed
diff --git a/pandas/tests/frame/test_arithmetic.py b/pandas/tests/frame/test_arithmetic.py
index 195126f1c5..567183e451 100644
--- a/pandas/tests/frame/test_arithmetic.py
+++ b/pandas/tests/frame/test_arithmetic.py
@@ -12,6 +12,7 @@ import numpy as np
import pytest
from pandas.compat import HAS_PYARROW
+from pandas.compat._optional import import_optional_dependency
import pandas.util._test_decorators as td
import pandas as pd
@@ -27,6 +28,7 @@ from pandas.tests.frame.common import (
_check_mixed_float,
_check_mixed_int,
)
+from pandas.util.version import Version
@pytest.fixture
@@ -1092,6 +1094,8 @@ class TestFrameArithmetic:
(operator.mod, "complex128"),
}
+ ne = import_optional_dependency("numexpr", errors="ignore")
+ ne_warns_on_op = ne is not None and Version(ne.__version__) < Version("2.13.1")
if (op, dtype) in invalid:
warn = None
if (dtype == "<M8[ns]" and op == operator.add) or (
@@ -1120,7 +1124,11 @@ class TestFrameArithmetic:
elif (op, dtype) in skip:
if op in [operator.add, operator.mul]:
- if expr.USE_NUMEXPR and switch_numexpr_min_elements == 0:
+ if (
+ expr.USE_NUMEXPR
+ and switch_numexpr_min_elements == 0
+ and ne_warns_on_op
+ ):
# "evaluating in Python space because ..."
warn = UserWarning
else:
diff --git a/pandas/tests/series/test_arithmetic.py b/pandas/tests/series/test_arithmetic.py
index a65d7687cf..28f12476c9 100644
--- a/pandas/tests/series/test_arithmetic.py
+++ b/pandas/tests/series/test_arithmetic.py
@@ -11,6 +11,7 @@ import pytest
from pandas._libs import lib
from pandas._libs.tslibs import IncompatibleFrequency
+from pandas.compat._optional import import_optional_dependency
import pandas as pd
from pandas import (
@@ -26,7 +27,7 @@ from pandas import (
import pandas._testing as tm
from pandas.core import ops
from pandas.core.computation import expressions as expr
-from pandas.core.computation.check import NUMEXPR_INSTALLED
+from pandas.util.version import Version
@pytest.fixture(autouse=True, params=[0, 1000000], ids=["numexpr", "python"])
@@ -353,9 +354,12 @@ class TestSeriesArithmetic:
def test_add_list_to_masked_array_boolean(self, request):
# GH#22962
+ ne = import_optional_dependency("numexpr", errors="ignore")
warning = (
UserWarning
- if request.node.callspec.id == "numexpr" and NUMEXPR_INSTALLED
+ if request.node.callspec.id == "numexpr"
+ and ne
+ and Version(ne.__version__) < Version("2.13.1")
else None
)
ser = Series([True, None, False], dtype="boolean")
diff --git a/pandas/tests/test_expressions.py b/pandas/tests/test_expressions.py
index dfec99f078..1ea16f96b7 100644
--- a/pandas/tests/test_expressions.py
+++ b/pandas/tests/test_expressions.py
@@ -4,6 +4,8 @@ import re
import numpy as np
import pytest
+from pandas.compat._optional import import_optional_dependency
+
from pandas import option_context
import pandas._testing as tm
from pandas.core.api import (
@@ -12,6 +14,7 @@ from pandas.core.api import (
Series,
)
from pandas.core.computation import expressions as expr
+from pandas.util.version import Version
@pytest.fixture
@@ -324,7 +327,7 @@ class TestExpressions:
@pytest.mark.parametrize(
"op_str,opname", [("+", "add"), ("*", "mul"), ("-", "sub")]
)
- def test_bool_ops_warn_on_arithmetic(self, op_str, opname):
+ def test_bool_ops_warn_on_arithmetic(self, op_str, opname, monkeypatch):
n = 10
df = DataFrame(
{
@@ -343,36 +346,47 @@ class TestExpressions:
# raises TypeError
return
- with tm.use_numexpr(True, min_elements=5):
- with tm.assert_produces_warning():
- r = f(df, df)
- e = fe(df, df)
- tm.assert_frame_equal(r, e)
-
- with tm.assert_produces_warning():
- r = f(df.a, df.b)
- e = fe(df.a, df.b)
- tm.assert_series_equal(r, e)
-
- with tm.assert_produces_warning():
- r = f(df.a, True)
- e = fe(df.a, True)
- tm.assert_series_equal(r, e)
-
- with tm.assert_produces_warning():
- r = f(False, df.a)
- e = fe(False, df.a)
- tm.assert_series_equal(r, e)
-
- with tm.assert_produces_warning():
- r = f(False, df)
- e = fe(False, df)
- tm.assert_frame_equal(r, e)
-
- with tm.assert_produces_warning():
- r = f(df, True)
- e = fe(df, True)
- tm.assert_frame_equal(r, e)
+ msg = "operator is not supported by numexpr"
+ ne = import_optional_dependency("numexpr", errors="ignore")
+ warning = (
+ UserWarning
+ if ne
+ and op_str in {"+", "*"}
+ and Version(ne.__version__) < Version("2.13.1")
+ else None
+ )
+ with monkeypatch.context() as m:
+ m.setattr(expr, "_MIN_ELEMENTS", 5)
+ with option_context("compute.use_numexpr", True):
+ with tm.assert_produces_warning(warning, match=msg):
+ r = f(df, df)
+ e = fe(df, df)
+ tm.assert_frame_equal(r, e)
+
+ with tm.assert_produces_warning(warning, match=msg):
+ r = f(df.a, df.b)
+ e = fe(df.a, df.b)
+ tm.assert_series_equal(r, e)
+
+ with tm.assert_produces_warning(warning, match=msg):
+ r = f(df.a, True)
+ e = fe(df.a, True)
+ tm.assert_series_equal(r, e)
+
+ with tm.assert_produces_warning(warning, match=msg):
+ r = f(False, df.a)
+ e = fe(False, df.a)
+ tm.assert_series_equal(r, e)
+
+ with tm.assert_produces_warning(warning, match=msg):
+ r = f(False, df)
+ e = fe(False, df)
+ tm.assert_frame_equal(r, e)
+
+ with tm.assert_produces_warning(warning, match=msg):
+ r = f(df, True)
+ e = fe(df, True)
+ tm.assert_frame_equal(r, e)
@pytest.mark.parametrize(
"test_input,expected",
|