summaryrefslogtreecommitdiff
path: root/numpy/core/src
diff options
context:
space:
mode:
authoriamsoto <theintrocode@gmail.com>2020-12-26 14:38:23 -0800
committermattip <matti.picus@gmail.com>2023-03-29 14:10:51 +0300
commit53f7b55cefa7207240e8bf5b8ec0f661c7b36491 (patch)
tree27450d33b8a80a7db4ac700236e397583c824f84 /numpy/core/src
parent4168b17169d88187a1f1527b297d6906ed1a60a7 (diff)
downloadnumpy-53f7b55cefa7207240e8bf5b8ec0f661c7b36491.tar.gz
PR_fixes_1
Diffstat (limited to 'numpy/core/src')
-rw-r--r--numpy/core/src/multiarray/einsum.c.src16
-rw-r--r--numpy/core/src/multiarray/einsum_sumprod.c.src67
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;