summaryrefslogtreecommitdiff
path: root/numpy/core/src/multiarray
diff options
context:
space:
mode:
authorCharles Harris <charlesr.harris@gmail.com>2022-11-10 16:44:40 -0600
committerGitHub <noreply@github.com>2022-11-10 16:44:40 -0600
commit2ad596fc8d015dd3f5ee30bedf068c2c3daf60d2 (patch)
tree6dff55a65386d846395cf17196eea0e19554ef12 /numpy/core/src/multiarray
parent6aacc5167983d7c6f8689d7039294f2fc0d5f5fb (diff)
parent7c317d9e2bb0ed04778fb0b2ef5661e2bb742347 (diff)
downloadnumpy-2ad596fc8d015dd3f5ee30bedf068c2c3daf60d2.tar.gz
Merge pull request #22566 from seberg/ObjectType-fixup
BUG: Fix use and errorchecking of ObjectType use
Diffstat (limited to 'numpy/core/src/multiarray')
-rw-r--r--numpy/core/src/multiarray/_multiarray_tests.c.src13
-rw-r--r--numpy/core/src/multiarray/arraytypes.c.src12
-rw-r--r--numpy/core/src/multiarray/multiarraymodule.c40
3 files changed, 53 insertions, 12 deletions
diff --git a/numpy/core/src/multiarray/_multiarray_tests.c.src b/numpy/core/src/multiarray/_multiarray_tests.c.src
index b22b2c14d..1fd28e721 100644
--- a/numpy/core/src/multiarray/_multiarray_tests.c.src
+++ b/numpy/core/src/multiarray/_multiarray_tests.c.src
@@ -177,8 +177,14 @@ test_neighborhood_iterator(PyObject* NPY_UNUSED(self), PyObject* args)
return NULL;
}
- typenum = PyArray_ObjectType(x, 0);
+ typenum = PyArray_ObjectType(x, NPY_NOTYPE);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
typenum = PyArray_ObjectType(fill, typenum);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
ax = (PyArrayObject*)PyArray_FromObject(x, typenum, 1, 10);
if (ax == NULL) {
@@ -343,7 +349,10 @@ test_neighborhood_iterator_oob(PyObject* NPY_UNUSED(self), PyObject* args)
return NULL;
}
- typenum = PyArray_ObjectType(x, 0);
+ typenum = PyArray_ObjectType(x, NPY_NOTYPE);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
ax = (PyArrayObject*)PyArray_FromObject(x, typenum, 1, 10);
if (ax == NULL) {
diff --git a/numpy/core/src/multiarray/arraytypes.c.src b/numpy/core/src/multiarray/arraytypes.c.src
index b7c339aa2..34694aac6 100644
--- a/numpy/core/src/multiarray/arraytypes.c.src
+++ b/numpy/core/src/multiarray/arraytypes.c.src
@@ -3803,17 +3803,23 @@ BOOL_dot(char *ip1, npy_intp is1, char *ip2, npy_intp is2, char *op, npy_intp n,
*((npy_bool *)op) = tmp;
}
+/*
+ * `dot` does not make sense for times, for DATETIME it never worked.
+ * For timedelta it does/did , but should probably also just be removed.
+ */
+#define DATETIME_dot NULL
+
/**begin repeat
*
* #name = BYTE, UBYTE, SHORT, USHORT, INT, UINT,
* LONG, ULONG, LONGLONG, ULONGLONG,
- * LONGDOUBLE, DATETIME, TIMEDELTA#
+ * LONGDOUBLE, TIMEDELTA#
* #type = npy_byte, npy_ubyte, npy_short, npy_ushort, npy_int, npy_uint,
* npy_long, npy_ulong, npy_longlong, npy_ulonglong,
- * npy_longdouble, npy_datetime, npy_timedelta#
+ * npy_longdouble, npy_timedelta#
* #out = npy_long, npy_ulong, npy_long, npy_ulong, npy_long, npy_ulong,
* npy_long, npy_ulong, npy_longlong, npy_ulonglong,
- * npy_longdouble, npy_datetime, npy_timedelta#
+ * npy_longdouble, npy_timedelta#
*/
static void
@name@_dot(char *ip1, npy_intp is1, char *ip2, npy_intp is2, char *op, npy_intp n,
diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c
index dda8831c5..b2925f758 100644
--- a/numpy/core/src/multiarray/multiarraymodule.c
+++ b/numpy/core/src/multiarray/multiarraymodule.c
@@ -899,11 +899,15 @@ PyArray_InnerProduct(PyObject *op1, PyObject *op2)
int i;
PyObject* ret = NULL;
- typenum = PyArray_ObjectType(op1, 0);
- if (typenum == NPY_NOTYPE && PyErr_Occurred()) {
+ typenum = PyArray_ObjectType(op1, NPY_NOTYPE);
+ if (typenum == NPY_NOTYPE) {
return NULL;
}
typenum = PyArray_ObjectType(op2, typenum);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
+
typec = PyArray_DescrFromType(typenum);
if (typec == NULL) {
if (!PyErr_Occurred()) {
@@ -991,11 +995,15 @@ PyArray_MatrixProduct2(PyObject *op1, PyObject *op2, PyArrayObject* out)
PyArray_Descr *typec = NULL;
NPY_BEGIN_THREADS_DEF;
- typenum = PyArray_ObjectType(op1, 0);
- if (typenum == NPY_NOTYPE && PyErr_Occurred()) {
+ typenum = PyArray_ObjectType(op1, NPY_NOTYPE);
+ if (typenum == NPY_NOTYPE) {
return NULL;
}
typenum = PyArray_ObjectType(op2, typenum);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
+
typec = PyArray_DescrFromType(typenum);
if (typec == NULL) {
if (!PyErr_Occurred()) {
@@ -1373,8 +1381,14 @@ PyArray_Correlate2(PyObject *op1, PyObject *op2, int mode)
int inverted;
int st;
- typenum = PyArray_ObjectType(op1, 0);
+ typenum = PyArray_ObjectType(op1, NPY_NOTYPE);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
typenum = PyArray_ObjectType(op2, typenum);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
typec = PyArray_DescrFromType(typenum);
Py_INCREF(typec);
@@ -1440,8 +1454,14 @@ PyArray_Correlate(PyObject *op1, PyObject *op2, int mode)
int unused;
PyArray_Descr *typec;
- typenum = PyArray_ObjectType(op1, 0);
+ typenum = PyArray_ObjectType(op1, NPY_NOTYPE);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
typenum = PyArray_ObjectType(op2, typenum);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
typec = PyArray_DescrFromType(typenum);
Py_INCREF(typec);
@@ -2541,8 +2561,14 @@ array_vdot(PyObject *NPY_UNUSED(dummy), PyObject *args)
* Conjugating dot product using the BLAS for vectors.
* Flattens both op1 and op2 before dotting.
*/
- typenum = PyArray_ObjectType(op1, 0);
+ typenum = PyArray_ObjectType(op1, NPY_NOTYPE);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
typenum = PyArray_ObjectType(op2, typenum);
+ if (typenum == NPY_NOTYPE) {
+ return NULL;
+ }
type = PyArray_DescrFromType(typenum);
Py_INCREF(type);