[Cython] BUG: assignment to typed memoryview

Daniele Nicolodi daniele at grinta.net
Tue Nov 26 16:18:51 CET 2013


Hello,

I believe there is a bug in how assignment to typed memoryviews is
handled in the compiler.  I think the following code should be valid code:

  cdef double[::1] a = np.arange(10, dtype=np.double)
  cdef double[::1] b = np.empty(a.size // 2)
  b[:] = a[::2]

However, the Cython compiler complains with:

  Memoryview 'double[:]' not conformable to memoryview 'double[::1]'.

A similar thing happens with memoryview copies:

  cdef double[::1] a = np.arange(10, dtype=np.double)
  cdef double[::1] b
  b = a[::2].copy()

In both cases I would expect Cython to copy the non contiguous elements
of the source array to the destination array (or to a newly created
array in the second case).  The copy() method is defined here
https://github.com/cython/cython/blob/master/Cython/Utility/MemoryView.pyx#L592
and (while I haven't spent much time analyzing it in detail) it seems to
do the right thing.

Indeed, if I short-circuit the src_conforms_to_dst() function
https://github.com/cython/cython/blob/master/Cython/Compiler/MemoryView.py#L141
the code compiles and runs correctly in both cases.

I don't know much about how the Cython compiler works, therefore I don't
know where to dig for the source of this problem.  Can someone point me
in the right direction?

Thanks. Cheers,
Daniele


More information about the cython-devel mailing list