diff options
author | Charles Harris <charlesr.harris@gmail.com> | 2021-11-25 18:42:24 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-25 18:42:24 -0700 |
commit | 157ee4f58d6f9f9c63ee7fdedf581785a7c51ec3 (patch) | |
tree | bae7b6ff41bbe260bf35e0bbd309d258523b6105 | |
parent | 87d6f96d7f107ced83eded0a04ec6519bef27448 (diff) | |
parent | 75fd6a71faddc10dad477cc60bf594d6a714f220 (diff) | |
download | numpy-157ee4f58d6f9f9c63ee7fdedf581785a7c51ec3.tar.gz |
Merge pull request #20466 from charris/backport-20365
BUG: Fix failure to create aligned, empty structured dtype
-rw-r--r-- | numpy/core/src/multiarray/descriptor.c | 2 | ||||
-rw-r--r-- | numpy/core/tests/test_dtype.py | 6 |
2 files changed, 7 insertions, 1 deletions
diff --git a/numpy/core/src/multiarray/descriptor.c b/numpy/core/src/multiarray/descriptor.c index b8b477e5d..fa24f1a87 100644 --- a/numpy/core/src/multiarray/descriptor.c +++ b/numpy/core/src/multiarray/descriptor.c @@ -1325,7 +1325,7 @@ _convert_from_dict(PyObject *obj, int align) goto fail; } /* If align is set, make sure the alignment divides into the size */ - if (align && itemsize % new->alignment != 0) { + if (align && new->alignment > 0 && itemsize % new->alignment != 0) { PyErr_Format(PyExc_ValueError, "NumPy dtype descriptor requires alignment of %d bytes, " "which is not divisible into the specified itemsize %d", diff --git a/numpy/core/tests/test_dtype.py b/numpy/core/tests/test_dtype.py index 1dcf1fb8e..3cb0c2b84 100644 --- a/numpy/core/tests/test_dtype.py +++ b/numpy/core/tests/test_dtype.py @@ -621,6 +621,12 @@ class TestSubarray: t2 = np.dtype('2i4', align=True) assert_equal(t1.alignment, t2.alignment) + def test_aligned_empty(self): + # Mainly regression test for gh-19696: construction failed completely + dt = np.dtype([], align=True) + assert dt == np.dtype([]) + dt = np.dtype({"names": [], "formats": [], "itemsize": 0}, align=True) + assert dt == np.dtype([]) def iter_struct_object_dtypes(): """ |