/* * Creates a result for reducing 'operand' along the axes specified * in 'axis_flags'. If 'dtype' isn't NULL, this function steals a * reference to 'dtype'. * * If 'out' isn't NULL, this function creates a view conforming * to the number of dimensions of 'operand', adding a singleton dimension * for each reduction axis specified. In this case, 'dtype' is ignored * (but its reference is still stolen), and the caller must handle any * type conversion/validity check for 'out' * * If 'subok' is true, creates a result with the subtype of 'operand', * otherwise creates on with the base ndarray class. * * If 'out' is NULL, it allocates a new array whose shape matches that of * 'operand', except for at the reduction axes. If 'dtype' is NULL, the dtype * of 'operand' is used for the result. */ NPY_NO_EXPORT PyArrayObject * PyArray_CreateReduceResult(PyArrayObject *operand, PyArrayObject *out, PyArray_Descr *dtype, npy_bool *axis_flags, int keepdims, int subok, const char *funcname) { PyArrayObject *result; if (out == NULL) { /* This function steals the reference to 'dtype' */ result = allocate_reduce_result(operand, axis_flags, dtype, subok); } else { int need_copy = 0; if (solve_may_share_memory(operand, out, 1) != 0) { need_copy = 1; } /* Steal the dtype reference */ Py_XDECREF(dtype); result = conform_reduce_result(PyArray_NDIM(operand), axis_flags, out, keepdims, funcname, need_copy); } return result; }
/* Returns 1 if the arrays have overlapping data, 0 otherwise */ NPY_NO_EXPORT int arrays_overlap(PyArrayObject *arr1, PyArrayObject *arr2) { mem_overlap_t result; result = solve_may_share_memory(arr1, arr2, NPY_MAY_SHARE_BOUNDS); if (result == MEM_OVERLAP_NO) { return 0; } else { return 1; } }