summaryrefslogtreecommitdiff
path: root/numpy/core/src/multiarray
diff options
context:
space:
mode:
authorJordy Williams <43758351+jordyjwilliams@users.noreply.github.com>2022-10-11 22:40:27 +1100
committerGitHub <noreply@github.com>2022-10-11 13:40:27 +0200
commit4d19f55dd94eb16e02a605ce963d02c51411057d (patch)
tree86621f53005dad9ba3769229e0bb596ec9ddb665 /numpy/core/src/multiarray
parent1ed87fa09d5a5887e2ef47b31e6fe2fefff9882a (diff)
downloadnumpy-4d19f55dd94eb16e02a605ce963d02c51411057d.tar.gz
ENH: allow explicit `like=None` in all array creation functions (#22379)
Addresses #22069. As discussed in the existing issue @seberg stated that it would be best to support explicitly defined like=None when creating arange objects. Extended to all other array_creation methods which did not currently support like=None. Closes gh-22069
Diffstat (limited to 'numpy/core/src/multiarray')
-rw-r--r--numpy/core/src/multiarray/arrayfunction_override.c4
-rw-r--r--numpy/core/src/multiarray/multiarraymodule.c48
2 files changed, 26 insertions, 26 deletions
diff --git a/numpy/core/src/multiarray/arrayfunction_override.c b/numpy/core/src/multiarray/arrayfunction_override.c
index af53d7821..2bb3fbe28 100644
--- a/numpy/core/src/multiarray/arrayfunction_override.c
+++ b/numpy/core/src/multiarray/arrayfunction_override.c
@@ -63,7 +63,7 @@ pyobject_array_insert(PyObject **array, int length, int index, PyObject *item)
* Collects arguments with __array_function__ and their corresponding methods
* in the order in which they should be tried (i.e., skipping redundant types).
* `relevant_args` is expected to have been produced by PySequence_Fast.
- * Returns the number of arguments, or -1 on failure.
+ * Returns the number of arguments, or -1 on failure.
*/
static int
get_implementing_args_and_methods(PyObject *relevant_args,
@@ -384,7 +384,7 @@ array_implement_array_function(
* only. Added as an extension to NEP-18 in an effort to bring NEP-35 to
* life with minimal dispatch overhead.
*
- * The caller must ensure that `like != NULL`.
+ * The caller must ensure that `like != Py_None` or `like == NULL`.
*/
NPY_NO_EXPORT PyObject *
array_implement_c_array_function_creation(
diff --git a/numpy/core/src/multiarray/multiarraymodule.c b/numpy/core/src/multiarray/multiarraymodule.c
index a5b66f5a8..dda8831c5 100644
--- a/numpy/core/src/multiarray/multiarraymodule.c
+++ b/numpy/core/src/multiarray/multiarraymodule.c
@@ -1734,7 +1734,7 @@ array_array(PyObject *NPY_UNUSED(ignored),
int ndmin = 0;
PyArray_Descr *type = NULL;
NPY_ORDER order = NPY_KEEPORDER;
- PyObject *like = NULL;
+ PyObject *like = Py_None;
NPY_PREPARE_ARGPARSER;
if (len_args != 1 || (kwnames != NULL)) {
@@ -1750,7 +1750,7 @@ array_array(PyObject *NPY_UNUSED(ignored),
Py_XDECREF(type);
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"array", like, NULL, NULL, args, len_args, kwnames);
if (deferred != Py_NotImplemented) {
@@ -1777,7 +1777,7 @@ array_asarray(PyObject *NPY_UNUSED(ignored),
PyObject *op;
PyArray_Descr *type = NULL;
NPY_ORDER order = NPY_KEEPORDER;
- PyObject *like = NULL;
+ PyObject *like = Py_None;
NPY_PREPARE_ARGPARSER;
if (len_args != 1 || (kwnames != NULL)) {
@@ -1790,7 +1790,7 @@ array_asarray(PyObject *NPY_UNUSED(ignored),
Py_XDECREF(type);
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"asarray", like, NULL, NULL, args, len_args, kwnames);
if (deferred != Py_NotImplemented) {
@@ -1816,7 +1816,7 @@ array_asanyarray(PyObject *NPY_UNUSED(ignored),
PyObject *op;
PyArray_Descr *type = NULL;
NPY_ORDER order = NPY_KEEPORDER;
- PyObject *like = NULL;
+ PyObject *like = Py_None;
NPY_PREPARE_ARGPARSER;
if (len_args != 1 || (kwnames != NULL)) {
@@ -1829,7 +1829,7 @@ array_asanyarray(PyObject *NPY_UNUSED(ignored),
Py_XDECREF(type);
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"asanyarray", like, NULL, NULL, args, len_args, kwnames);
if (deferred != Py_NotImplemented) {
@@ -1855,7 +1855,7 @@ array_ascontiguousarray(PyObject *NPY_UNUSED(ignored),
{
PyObject *op;
PyArray_Descr *type = NULL;
- PyObject *like = NULL;
+ PyObject *like = Py_None;
NPY_PREPARE_ARGPARSER;
if (len_args != 1 || (kwnames != NULL)) {
@@ -1867,7 +1867,7 @@ array_ascontiguousarray(PyObject *NPY_UNUSED(ignored),
Py_XDECREF(type);
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"ascontiguousarray", like, NULL, NULL, args, len_args, kwnames);
if (deferred != Py_NotImplemented) {
@@ -1893,7 +1893,7 @@ array_asfortranarray(PyObject *NPY_UNUSED(ignored),
{
PyObject *op;
PyArray_Descr *type = NULL;
- PyObject *like = NULL;
+ PyObject *like = Py_None;
NPY_PREPARE_ARGPARSER;
if (len_args != 1 || (kwnames != NULL)) {
@@ -1905,7 +1905,7 @@ array_asfortranarray(PyObject *NPY_UNUSED(ignored),
Py_XDECREF(type);
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"asfortranarray", like, NULL, NULL, args, len_args, kwnames);
if (deferred != Py_NotImplemented) {
@@ -1978,7 +1978,7 @@ array_empty(PyObject *NPY_UNUSED(ignored),
NPY_ORDER order = NPY_CORDER;
npy_bool is_f_order;
PyArrayObject *ret = NULL;
- PyObject *like = NULL;
+ PyObject *like = Py_None;
NPY_PREPARE_ARGPARSER;
if (npy_parse_arguments("empty", args, len_args, kwnames,
@@ -1990,7 +1990,7 @@ array_empty(PyObject *NPY_UNUSED(ignored),
goto fail;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"empty", like, NULL, NULL, args, len_args, kwnames);
if (deferred != Py_NotImplemented) {
@@ -2180,7 +2180,7 @@ array_zeros(PyObject *NPY_UNUSED(ignored),
NPY_ORDER order = NPY_CORDER;
npy_bool is_f_order = NPY_FALSE;
PyArrayObject *ret = NULL;
- PyObject *like = NULL;
+ PyObject *like = Py_None;
NPY_PREPARE_ARGPARSER;
if (npy_parse_arguments("zeros", args, len_args, kwnames,
@@ -2193,7 +2193,7 @@ array_zeros(PyObject *NPY_UNUSED(ignored),
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"zeros", like, NULL, NULL, args, len_args, kwnames);
if (deferred != Py_NotImplemented) {
@@ -2256,7 +2256,7 @@ array_fromstring(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *keywds
char *sep = NULL;
Py_ssize_t s;
static char *kwlist[] = {"string", "dtype", "count", "sep", "like", NULL};
- PyObject *like = NULL;
+ PyObject *like = Py_None;
PyArray_Descr *descr = NULL;
if (!PyArg_ParseTupleAndKeywords(args, keywds,
@@ -2265,7 +2265,7 @@ array_fromstring(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *keywds
Py_XDECREF(descr);
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"fromstring", like, args, keywds, NULL, 0, NULL);
if (deferred != Py_NotImplemented) {
@@ -2297,7 +2297,7 @@ array_fromfile(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *keywds)
char *sep = "";
Py_ssize_t nin = -1;
static char *kwlist[] = {"file", "dtype", "count", "sep", "offset", "like", NULL};
- PyObject *like = NULL;
+ PyObject *like = Py_None;
PyArray_Descr *type = NULL;
int own;
npy_off_t orig_pos = 0, offset = 0;
@@ -2310,7 +2310,7 @@ array_fromfile(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *keywds)
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"fromfile", like, args, keywds, NULL, 0, NULL);
if (deferred != Py_NotImplemented) {
@@ -2387,7 +2387,7 @@ array_fromiter(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *keywds)
PyObject *iter;
Py_ssize_t nin = -1;
static char *kwlist[] = {"iter", "dtype", "count", "like", NULL};
- PyObject *like = NULL;
+ PyObject *like = Py_None;
PyArray_Descr *descr = NULL;
if (!PyArg_ParseTupleAndKeywords(args, keywds,
@@ -2396,7 +2396,7 @@ array_fromiter(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *keywds)
Py_XDECREF(descr);
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"fromiter", like, args, keywds, NULL, 0, NULL);
if (deferred != Py_NotImplemented) {
@@ -2414,7 +2414,7 @@ array_frombuffer(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *keywds
PyObject *obj = NULL;
Py_ssize_t nin = -1, offset = 0;
static char *kwlist[] = {"buffer", "dtype", "count", "offset", "like", NULL};
- PyObject *like = NULL;
+ PyObject *like = Py_None;
PyArray_Descr *type = NULL;
if (!PyArg_ParseTupleAndKeywords(args, keywds,
@@ -2424,7 +2424,7 @@ array_frombuffer(PyObject *NPY_UNUSED(ignored), PyObject *args, PyObject *keywds
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"frombuffer", like, args, keywds, NULL, 0, NULL);
if (deferred != Py_NotImplemented) {
@@ -3043,7 +3043,7 @@ array_arange(PyObject *NPY_UNUSED(ignored),
{
PyObject *o_start = NULL, *o_stop = NULL, *o_step = NULL, *range=NULL;
PyArray_Descr *typecode = NULL;
- PyObject *like = NULL;
+ PyObject *like = Py_None;
NPY_PREPARE_ARGPARSER;
if (npy_parse_arguments("arange", args, len_args, kwnames,
@@ -3056,7 +3056,7 @@ array_arange(PyObject *NPY_UNUSED(ignored),
Py_XDECREF(typecode);
return NULL;
}
- if (like != NULL) {
+ if (like != Py_None) {
PyObject *deferred = array_implement_c_array_function_creation(
"arange", like, NULL, NULL, args, len_args, kwnames);
if (deferred != Py_NotImplemented) {