diff options
author | iamsoto <theintrocode@gmail.com> | 2020-12-26 14:38:23 -0800 |
---|---|---|
committer | mattip <matti.picus@gmail.com> | 2023-03-29 14:10:51 +0300 |
commit | 53f7b55cefa7207240e8bf5b8ec0f661c7b36491 (patch) | |
tree | 27450d33b8a80a7db4ac700236e397583c824f84 /numpy/core/src | |
parent | 4168b17169d88187a1f1527b297d6906ed1a60a7 (diff) | |
download | numpy-53f7b55cefa7207240e8bf5b8ec0f661c7b36491.tar.gz |
PR_fixes_1
Diffstat (limited to 'numpy/core/src')
-rw-r--r-- | numpy/core/src/multiarray/einsum.c.src | 16 | ||||
-rw-r--r-- | numpy/core/src/multiarray/einsum_sumprod.c.src | 67 |
2 files changed, 31 insertions, 52 deletions
diff --git a/numpy/core/src/multiarray/einsum.c.src b/numpy/core/src/multiarray/einsum.c.src index cd1a58982..1b3dbd90b 100644 --- a/numpy/core/src/multiarray/einsum.c.src +++ b/numpy/core/src/multiarray/einsum.c.src @@ -536,6 +536,10 @@ unbuffered_loop_nop1_ndim2(NpyIter *iter) for (coord = shape[1]; coord > 0; --coord) { sop(1, ptrs[0], strides[0], shape[0]); + if(PyErr_Occurred()){ + return -1; + } + ptr = ptrs[1][0] + strides[1][0]; ptrs[0][0] = ptrs[1][0] = ptr; ptr = ptrs[1][1] + strides[1][1]; @@ -591,6 +595,10 @@ unbuffered_loop_nop1_ndim3(NpyIter *iter) for (coords[0] = shape[1]; coords[0] > 0; --coords[0]) { sop(1, ptrs[0], strides[0], shape[0]); + if(PyErr_Occurred()){ + return -1; + } + ptr = ptrs[1][0] + strides[1][0]; ptrs[0][0] = ptrs[1][0] = ptr; ptr = ptrs[1][1] + strides[1][1]; @@ -647,6 +655,10 @@ unbuffered_loop_nop2_ndim2(NpyIter *iter) for (coord = shape[1]; coord > 0; --coord) { sop(2, ptrs[0], strides[0], shape[0]); + if(PyErr_Occurred()){ + return -1; + } + ptr = ptrs[1][0] + strides[1][0]; ptrs[0][0] = ptrs[1][0] = ptr; ptr = ptrs[1][1] + strides[1][1]; @@ -704,6 +716,10 @@ unbuffered_loop_nop2_ndim3(NpyIter *iter) for (coords[0] = shape[1]; coords[0] > 0; --coords[0]) { sop(2, ptrs[0], strides[0], shape[0]); + if(PyErr_Occurred()){ + return -1; + } + ptr = ptrs[1][0] + strides[1][0]; ptrs[0][0] = ptrs[1][0] = ptr; ptr = ptrs[1][1] + strides[1][1]; diff --git a/numpy/core/src/multiarray/einsum_sumprod.c.src b/numpy/core/src/multiarray/einsum_sumprod.c.src index 283021c43..e39ff0cee 100644 --- a/numpy/core/src/multiarray/einsum_sumprod.c.src +++ b/numpy/core/src/multiarray/einsum_sumprod.c.src @@ -1024,55 +1024,15 @@ bool_sum_of_products_outstride0_@noplabel@(int nop, char **dataptr, # endif } -/* For now, a catch all function for objects */ -static void -object_sum_of_products_@noplabel@(int nop, char **dataptr, - npy_intp const *strides, npy_intp count) -{ - PyObject *tmp1, *tmp2 = NULL; - - while(count--){ - tmp1 = *(PyObject **)dataptr[0]; - if(!tmp1){ - return; - } - int i; - for(i = 1; i < nop; ++i){ - Py_XDECREF(tmp2); - if((*(PyObject **)dataptr[i]) == NULL){ - return; - } - tmp2 = PyNumber_Multiply(tmp1, *(PyObject **)dataptr[i]); - if(!tmp2){ - return; - } - tmp1 = tmp2; - } - - if(*(PyObject **)dataptr[i] == NULL){ - Py_XDECREF(tmp2); - return; - } - - tmp2 = PyNumber_Add(tmp1, *(PyObject **)dataptr[i]); - if(i != 0){ - Py_XDECREF(tmp1); - } - if(!tmp2){ - return; - } - Py_XDECREF(*(PyObject **)dataptr[nop]); - *(PyObject **)dataptr[nop] = tmp2; - tmp2 = 0; - for (i = 0; i <= nop; ++i){ - dataptr[i] += strides[i]; - } - } -} /**end repeat**/ /**begin repeat - * #fn_name = object_sum_of_products_contig_one, + * #fn_name = + * object_sum_of_products_any, + * object_sum_of_products_one, + * object_sum_of_products_two, + * object_sum_of_products_three, + * object_sum_of_products_contig_one, * object_sum_of_products_contig_two, * object_sum_of_products_stride0_contig_outcontig_two, * object_sum_of_products_contig_stride0_outcontig_two, @@ -1099,13 +1059,15 @@ static void return; } int i; + Py_INCREF(tmp1); for(i = 1; i < nop; ++i){ - Py_XDECREF(tmp2); if((*(PyObject **)dataptr[i]) == NULL){ return; } - tmp2 = PyNumber_Multiply(tmp1, *(PyObject **)dataptr[i]); + tmp2 = PyNumber_Multiply(*(PyObject **)dataptr[i], tmp1); + Py_XDECREF(tmp1); if(!tmp2){ + /* Potential raised Exception */ return; } tmp1 = tmp2; @@ -1116,13 +1078,14 @@ static void return; } - tmp2 = PyNumber_Add(tmp1, *(PyObject **)dataptr[i]); - if(nop > 1){ - Py_XDECREF(tmp1); - } + tmp2 = PyNumber_Add(*(PyObject **)dataptr[i], tmp1); + Py_XDECREF(tmp1); + if(!tmp2){ + /* Potential raised Exception */ return; } + Py_XDECREF(*(PyObject **)dataptr[nop]); *(PyObject **)dataptr[nop] = tmp2; tmp2 = 0; |