summaryrefslogtreecommitdiff
path: root/numpy/lib
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/lib')
-rw-r--r--numpy/lib/arraysetops.py7
-rw-r--r--numpy/lib/tests/test_arraysetops.py20
2 files changed, 26 insertions, 1 deletions
diff --git a/numpy/lib/arraysetops.py b/numpy/lib/arraysetops.py
index 9a44d7e44..fa332e7fd 100644
--- a/numpy/lib/arraysetops.py
+++ b/numpy/lib/arraysetops.py
@@ -636,6 +636,13 @@ def in1d(ar1, ar2, assume_unique=False, invert=False, *, kind=None):
f"Invalid kind: '{kind}'. Please use None, 'sort' or 'table'.")
if integer_arrays and kind in {None, 'table'}:
+
+ if ar2.size == 0:
+ if invert:
+ return np.ones_like(ar1, dtype=bool)
+ else:
+ return np.zeros_like(ar1, dtype=bool)
+
ar2_min = np.min(ar2)
ar2_max = np.max(ar2)
diff --git a/numpy/lib/tests/test_arraysetops.py b/numpy/lib/tests/test_arraysetops.py
index d91d36282..a21e5f640 100644
--- a/numpy/lib/tests/test_arraysetops.py
+++ b/numpy/lib/tests/test_arraysetops.py
@@ -232,12 +232,30 @@ class TestSetOps:
assert_isin_equal(5, 6)
# empty array-like:
- if kind in {None, "sort"}:
+ if kind != "table":
+ # An empty list will become float64,
+ # which is invalid for kind="table"
x = []
assert_isin_equal(x, b)
assert_isin_equal(a, x)
assert_isin_equal(x, x)
+ # empty array with various types:
+ for dtype in [bool, np.int64, np.float64]:
+ if kind == "table" and dtype == np.float64:
+ continue
+
+ if dtype in {np.int64, np.float64}:
+ ar = np.array([10, 20, 30], dtype=dtype)
+ elif dtype in {bool}:
+ ar = np.array([True, False, False])
+
+ empty_array = np.array([], dtype=dtype)
+
+ assert_isin_equal(empty_array, ar)
+ assert_isin_equal(ar, empty_array)
+ assert_isin_equal(empty_array, empty_array)
+
@pytest.mark.parametrize("kind", [None, "sort", "table"])
def test_in1d(self, kind):
# we use two different sizes for the b array here to test the