Browse Source

corrade/containers: finally give up on testing ArrayView dimensions.

Numpy's array sometimes has 0 dimensions even though everything else is
okay.
pull/2/head
Vladimír Vondruš 7 years ago
parent
commit
4cbda8081b
  1. 5
      src/python/corrade/containers.cpp
  2. 7
      src/python/corrade/test/test_containers.py

5
src/python/corrade/containers.cpp

@ -114,8 +114,9 @@ template<class T> void arrayView(py::class_<PyArrayView<T>>& c) {
Containers::ScopeGuard e{&buffer, PyBuffer_Release}; Containers::ScopeGuard e{&buffer, PyBuffer_Release};
if(buffer.ndim != 1) /* I would test for dimensions here but np.array() sometimes gives
throw py::buffer_error{Utility::formatString("expected one dimension but got {}", buffer.ndim)}; 0 for an one-dimensional array so ¯\_()_/¯ */
if(buffer.strides && buffer.strides[0] != buffer.itemsize) if(buffer.strides && buffer.strides[0] != buffer.itemsize)
throw py::buffer_error{Utility::formatString("expected stride of {} but got {}", buffer.itemsize, buffer.strides[0])}; throw py::buffer_error{Utility::formatString("expected stride of {} but got {}", buffer.itemsize, buffer.strides[0])};

7
src/python/corrade/test/test_containers.py

@ -87,13 +87,6 @@ class ArrayView(unittest.TestCase):
self.assertIs(b.obj, a) self.assertIs(b.obj, a)
self.assertEqual(len(b), 3*4) 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): def test_init_buffer_unexpected_stride(self):
a = memoryview(b'hello')[::2] a = memoryview(b'hello')[::2]
self.assertEqual(bytes(a), b'hlo') self.assertEqual(bytes(a), b'hlo')

Loading…
Cancel
Save