[Cython] Upcoming cython/numpy breakage with stride checking

Nathaniel Smith njs at pobox.com
Sat Apr 6 16:19:48 CEST 2013


Hi all,

If you build current numpy master with
  NPY_RELAXED_STRIDES_CHECKING=1 python setup.py install
then Cython code using ndarrays starts blowing up, e.g.:

# foo.pyx
def add_one(array):
    cdef double[::1] a = array
    a[0] += 1.
    return array

>>> foo.add_one(np.ascontiguousarray(np.arange(10.)[::100]))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "foo.pyx", line 2, in foo.add_one (foo.c:1210)
    cdef double[::1] a = array
ValueError: Buffer and memoryview are not contiguous in the same dimension.

The problem (as discussed before) is that Cython has an unnecessarily
strict definition of "contiguous", so NPY_RELAXED_STRIDES_CHECKING=1
pretty much breaks all existing compiled Cython modules.

Our plan is to make NPY_RELAXED_STRIDES_CHECKING=1 into the default
sooner or later, and Cython is a major blocker on this plan. It may
become the default as soon as the 1.8 pre-releases (with the
expectation that we'll probably have to switch back again before the
actual release, but still).

References:

Previous thread:
  http://thread.gmane.org/gmane.comp.python.cython.devel/14634
Detailed discussion of the difference between numpy/cython's current
definition of "contiguity", and the correct definition:
  http://thread.gmane.org/gmane.comp.python.cython.devel/14634/focus=14640
The PR implementing NPY_RELAXED_STRIDES_CHECKING:
  https://github.com/numpy/numpy/pull/3162
Another test case:
  https://github.com/numpy/numpy/issues/2956

We're hoping that Cython will also switch soon to the more accurate
check for contiguity. This shouldn't cause any backwards compatibility
problems -- it just means Cython code would make strictly fewer
copies, and error out due to lack of contiguity strictly less often,
even with older numpys. And it seems like a necessary step for getting
this untangled and minimizing user pain. What do you think?

-n


More information about the cython-devel mailing list