diff options
author | Nathan Goldbaum <nathan.goldbaum@gmail.com> | 2023-04-19 09:21:19 -0600 |
---|---|---|
committer | Nathan Goldbaum <nathan.goldbaum@gmail.com> | 2023-04-19 09:21:19 -0600 |
commit | e53314488e666cd64de334c53171d1680d508389 (patch) | |
tree | 2dbc22392ebd9410d71a5f978dd486ef531fffba /numpy/core/src | |
parent | f8babe2788a8be941e4b1588d4f3c0bd9b0621c3 (diff) | |
download | numpy-e53314488e666cd64de334c53171d1680d508389.tar.gz |
MNT: respond to review comments
Diffstat (limited to 'numpy/core/src')
-rw-r--r-- | numpy/core/src/multiarray/ctors.c | 20 | ||||
-rw-r--r-- | numpy/core/src/multiarray/dtypemeta.c | 6 |
2 files changed, 11 insertions, 15 deletions
diff --git a/numpy/core/src/multiarray/ctors.c b/numpy/core/src/multiarray/ctors.c index 9f09cf55d..f2ccc2325 100644 --- a/numpy/core/src/multiarray/ctors.c +++ b/numpy/core/src/multiarray/ctors.c @@ -715,6 +715,11 @@ PyArray_NewFromDescr_int( fa->base = (PyObject *)NULL; fa->weakreflist = (PyObject *)NULL; + /* needed for zero-filling logic below, defined and initialized up here + so cleanup logic can go in the fail block */ + NPY_traverse_info fill_zero_info; + NPY_traverse_info_init(&fill_zero_info); + if (nd > 0) { fa->dimensions = npy_alloc_cache_dim(2 * nd); if (fa->dimensions == NULL) { @@ -784,10 +789,8 @@ PyArray_NewFromDescr_int( if (data == NULL) { - NPY_traverse_info fill_zero_info; /* float errors do not matter and we do not release GIL */ - NPY_ARRAYMETHOD_FLAGS zero_flags = PyArrayMethod_MINIMAL_FLAGS; - NPY_traverse_info_init(&fill_zero_info); + NPY_ARRAYMETHOD_FLAGS zero_flags; get_traverse_loop_function *get_fill_zero_loop = NPY_DT_SLOTS(NPY_DTYPE(descr))->get_fill_zero_loop; if (get_fill_zero_loop != NULL) { @@ -843,13 +846,8 @@ PyArray_NewFromDescr_int( /* * If the array needs special dtype-specific zero-filling logic, do that */ - if (zeroed && (fill_zero_info.func != NULL)) { - npy_intp size = 1; - for (int i = 0; i < nd; i++) { - if (npy_mul_sizes_with_overflow(&size, size, dims[i])) { - goto fail; - } - } + if (NPY_UNLIKELY(zeroed && (fill_zero_info.func != NULL))) { + npy_intp size = PyArray_MultiplyList(fa->dimensions, fa->nd); if (fill_zero_info.func( NULL, descr, data, size, descr->elsize, fill_zero_info.auxdata) < 0) { @@ -951,9 +949,11 @@ PyArray_NewFromDescr_int( } } } + NPY_traverse_info_xfree(fill_zero_info); return (PyObject *)fa; fail: + NPY_traverse_info_xfree(fill_zero_info); Py_XDECREF(fa->mem_handler); Py_DECREF(fa); return NULL; diff --git a/numpy/core/src/multiarray/dtypemeta.c b/numpy/core/src/multiarray/dtypemeta.c index 5e9fd3540..eb38ec7e3 100644 --- a/numpy/core/src/multiarray/dtypemeta.c +++ b/numpy/core/src/multiarray/dtypemeta.c @@ -742,15 +742,11 @@ fill_zero_object_strided_loop( NpyAuxData *NPY_UNUSED(auxdata)) { PyObject *zero = PyLong_FromLong(0); - PyObject **optr = (PyObject **)data; while (size--) { Py_INCREF(zero); - *optr++ = zero; + memcpy(data, &zero, sizeof(zero)); } Py_DECREF(zero); - if (PyErr_Occurred()) { - return -1; - } return 0; } |