summaryrefslogtreecommitdiff
path: root/numpy/core/src
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/core/src')
-rw-r--r--numpy/core/src/arrayobject.c28
-rw-r--r--numpy/core/src/multiarraymodule.c51
2 files changed, 54 insertions, 25 deletions
diff --git a/numpy/core/src/arrayobject.c b/numpy/core/src/arrayobject.c
index 417b12717..1a126e3e2 100644
--- a/numpy/core/src/arrayobject.c
+++ b/numpy/core/src/arrayobject.c
@@ -10729,32 +10729,10 @@ arraydescr_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
return NULL;
if (align) {
- conv = NULL;
- if PyDict_Check(odescr)
- conv = _convert_from_dict(odescr, 1);
- else if PyList_Check(odescr) {
- PyErr_SetString(PyExc_ValueError,
- "align cannot be True" \
- " with array_descriptor " \
- "specification.");
- return NULL;
- }
- else if PyString_Check(odescr)
- conv = _convert_from_commastring(odescr, 1);
- else {
- PyErr_SetString(PyExc_ValueError,
- "align can only be non-zero for " \
- "dictionary, list, and string objects.");
- }
- if (conv) return (PyObject *)conv;
- if (!PyErr_Occurred()) {
- PyErr_SetString(PyExc_ValueError,
- "data-type-descriptor not understood");
- }
- return NULL;
+ if (!PyArray_DescrAlignConverter(odescr, &conv))
+ return NULL;
}
-
- if (!PyArray_DescrConverter(odescr, &conv))
+ else if (!PyArray_DescrConverter(odescr, &conv))
return NULL;
/* Get a new copy of it unless it's already a copy */
if (copy && conv->fields == Py_None) {
diff --git a/numpy/core/src/multiarraymodule.c b/numpy/core/src/multiarraymodule.c
index ec3cd88d2..d3c2830e1 100644
--- a/numpy/core/src/multiarraymodule.c
+++ b/numpy/core/src/multiarraymodule.c
@@ -4661,6 +4661,57 @@ _check_for_commastring(char *type, int len)
/*MULTIARRAY_API
+ Get type-descriptor from an object forcing alignment if possible
+ None goes to DEFAULT type.
+*/
+static int
+PyArray_DescrAlignConverter(PyObject *obj, PyArray_Descr **at)
+{
+ if PyDict_Check(obj) {
+ *at = _convert_from_dict(obj, 1);
+ }
+ else if PyString_Check(obj)
+ *at = _convert_from_commastring(obj, 1);
+ else {
+ return PyArray_DescrConverter(obj, at);
+ }
+ if (*at == NULL) {
+ if (!PyErr_Occurred()) {
+ PyErr_SetString(PyExc_ValueError,
+ "data-type-descriptor not understood");
+ }
+ return PY_FAIL;
+ }
+ return PY_SUCCEED;
+}
+
+/*MULTIARRAY_API
+ Get type-descriptor from an object forcing alignment if possible
+ None goes to NULL.
+*/
+static int
+PyArray_DescrAlignConverter2(PyObject *obj, PyArray_Descr **at)
+{
+ if PyDict_Check(obj) {
+ *at = _convert_from_dict(obj, 1);
+ }
+ else if PyString_Check(obj)
+ *at = _convert_from_commastring(obj, 1);
+ else {
+ return PyArray_DescrConverter2(obj, at);
+ }
+ if (*at == NULL) {
+ if (!PyErr_Occurred()) {
+ PyErr_SetString(PyExc_ValueError,
+ "data-type-descriptor not understood");
+ }
+ return PY_FAIL;
+ }
+ return PY_SUCCEED;
+}
+
+
+/*MULTIARRAY_API
Get typenum from an object -- None goes to NULL
*/
static int