Skip to content

Commit

Permalink
Merge pull request #21473 from charris/backport-21436
Browse files Browse the repository at this point in the history
BUG: Fix segmentation fault (#21436)
  • Loading branch information
charris committed May 9, 2022
2 parents 7db9ae7 + fb8fa52 commit 8b09bba
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
7 changes: 7 additions & 0 deletions numpy/core/src/umath/ufunc_object.c
Expand Up @@ -5884,6 +5884,13 @@ ufunc_at(PyUFuncObject *ufunc, PyObject *args)

NPY_BEGIN_THREADS_DEF;

if (ufunc->core_enabled) {
PyErr_Format(PyExc_TypeError,
"%s.at does not support ufunc with non-trivial signature: %s has signature %s.",
ufunc->name, ufunc->name, ufunc->core_signature);
return NULL;
}

if (ufunc->nin > 2) {
PyErr_SetString(PyExc_ValueError,
"Only unary and binary ufuncs supported at this time");
Expand Down
16 changes: 15 additions & 1 deletion numpy/core/tests/test_ufunc.py
Expand Up @@ -389,7 +389,7 @@ def test_signature8(self):
assert_equal(ixs, (0, 0, 0, 1, 2))
assert_equal(flags, (self.can_ignore, self.size_inferred, 0))
assert_equal(sizes, (3, -1, 9))

def test_signature9(self):
enabled, num_dims, ixs, flags, sizes = umt.test_signature(
1, 1, "( 3) -> ( )")
Expand Down Expand Up @@ -2002,6 +2002,20 @@ def test_inplace_fancy_indexing(self):
# Test multiple output ufuncs raise error, gh-5665
assert_raises(ValueError, np.modf.at, np.arange(10), [1])

# Test maximum
a = np.array([1, 2, 3])
np.maximum.at(a, [0], 0)
assert_equal(np.array([1, 2, 3]), a)

def test_at_not_none_signature(self):
# Test ufuncs with non-trivial signature raise a TypeError
a = np.ones((2, 2, 2))
b = np.ones((1, 2, 2))
assert_raises(TypeError, np.matmul.at, a, [0], b)

a = np.array([[[1, 2], [3, 4]]])
assert_raises(TypeError, np.linalg._umath_linalg.det.at, a, [0])

def test_reduce_arguments(self):
f = np.add.reduce
d = np.ones((5,2), dtype=int)
Expand Down

0 comments on commit 8b09bba

Please sign in to comment.