[Cython] "relaxed_strides" test broken with NumPy 1.8

Stefan Behnel stefan_ml at behnel.de
Sat Jan 4 15:46:14 CET 2014


Stefan Behnel, 04.01.2014 12:53:
> mark florisson, 03.01.2014 23:28:
>> On 3 January 2014 18:22, Stefan Behnel wrote:
>>> I enabled the NumPy build for our Py3.3 test runs and while I was at it, I
>>> got it to use the latest NumPy release 1.8. This made one of the tests fail:
>>>
>>> """
>>>     Traceback (most recent call last):
>>>       File ".../doctest.py", line 1313, in __run
>>>         compileflags, 1), test.globs)
>>>       File "<doctest relaxed_strides.__test__.test_one_sized (line
>>> 29)[3]>", line 1, in <module>
>>>         test_one_sized(a)[0]
>>>       File "relaxed_strides.pyx", line 38, in
>>> relaxed_strides.test_one_sized (relaxed_strides.cpp:1414)
>>>       File "stringsource", line 622, in View.MemoryView.memoryview_cwrapper
>>> (relaxed_strides.cpp:7568)
>>>       File "stringsource", line 327, in
>>> View.MemoryView.memoryview.__cinit__ (relaxed_strides.cpp:3717)
>>>
>>>     ValueError: ndarray is not C-contiguous
>>> """
>>>
>>> https://sage.math.washington.edu:8091/hudson/job/cython-devel-tests/1787/ARCH=m64,BACKEND=cpp,PYVERSION=py33m/console
>>>
>>> According to the comments in the test file and the corresponding NumPy pull
>>> request, this seems to be somewhat expected.
>>>
>>> https://github.com/cython/cython/blob/master/tests/memoryview/relaxed_strides.pyx
>>>
>>> https://github.com/numpy/numpy/pull/3162
>>>
>>> Does someone know enough about this to figure out what to do?
>>
>> It seems to come from the call to __Pyx_GetBuffer, which is
>> PyObject_GetBuffer in python 3. Maybe this is Python 3 not checking
>> for an extent of 1, but instead only checking the stride (which is a
>> multiple of the itemsize)?
> 
> No, Py3 doesn't do any validation here, it does a straight call into the
> object's slot function, i.e. into the NumPy array itself.
> 
> So, the question is: who's wrong here? The test or NumPy?
> 
> Hmm, or maybe just me. I didn't define the NPY_RELAXED_STRIDES_CHECKING
> environment variable for the NumPy build. Let's try that first.
> 
> http://docs.scipy.org/doc/numpy/release.html#npy-relaxed-strides-checking

Yep, that was it. Seems to work nicely now.

Stefan



More information about the cython-devel mailing list