diff --git a/src/python/corrade/containers.cpp b/src/python/corrade/containers.cpp index 0048184..83b1f62 100644 --- a/src/python/corrade/containers.cpp +++ b/src/python/corrade/containers.cpp @@ -114,8 +114,9 @@ template void arrayView(py::class_>& c) { Containers::ScopeGuard e{&buffer, PyBuffer_Release}; - if(buffer.ndim != 1) - throw py::buffer_error{Utility::formatString("expected one dimension but got {}", buffer.ndim)}; + /* I would test for dimensions here but np.array() sometimes gives + 0 for an one-dimensional array so ¯\_(ツ)_/¯ */ + if(buffer.strides && buffer.strides[0] != buffer.itemsize) throw py::buffer_error{Utility::formatString("expected stride of {} but got {}", buffer.itemsize, buffer.strides[0])}; diff --git a/src/python/corrade/test/test_containers.py b/src/python/corrade/test/test_containers.py index ee5697b..843167a 100644 --- a/src/python/corrade/test/test_containers.py +++ b/src/python/corrade/test/test_containers.py @@ -87,13 +87,6 @@ class ArrayView(unittest.TestCase): self.assertIs(b.obj, a) self.assertEqual(len(b), 3*4) - @unittest.skip("there doesn't seem to be a way to make memoryview give back N-dimensional array that can't be represented as linear memory") - def test_init_buffer_unexpected_dimensions(self): - a = memoryview(b'123456').cast('b', shape=[2, 3]) - self.assertEqual(bytes(a), b'123456') - with self.assertRaisesRegex(BufferError, "but what"): - b = containers.ArrayView(a) - def test_init_buffer_unexpected_stride(self): a = memoryview(b'hello')[::2] self.assertEqual(bytes(a), b'hlo')