Hi All,

I am working on porting scipy to Cython3. The last missing part in order to
have a test suite is 2 tests failing [1]. When I investigated the issue, I
found out that Cython has changed the type of Exception. Consider following
example:

cimport numpy as cnp
import cython

ctypedef fused np_numeric_t:
    cnp.int8_t
    cnp.int16_t
    cnp.int32_t
    cnp.int64_t
    cnp.uint8_t
    cnp.uint16_t
    cnp.uint32_t
    cnp.uint64_t
    cnp.float32_t
    cnp.float64_t
    cnp.longdouble_t
    cnp.complex64_t
    cnp.complex128_t

@cython.initializedcheck(False)
def bandwidth_c(np_numeric_t[:, ::1]A):
    return

In cython 0.29.X I got following:

>>> import numpy as np
>>> zz = np.zeros([5, 5], dtype='M')
>>> import fused
>>> fused.bandwidth_c(zz)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "fused.pyx", line 32, in fused.__pyx_fused_cpdef
    def bandwidth_c(np_numeric_t[:, ::1]A):
TypeError: No matching signature found

And in Cython3 (master branch) I got following:

>>> import numpy as np
>>> zz = np.zeros([5, 5], dtype='M')
>>> import fused
>>> fused.bandwidth_c(zz)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "fused.pyx", line 31, in fused.__pyx_fused_cpdef
    @cython.initializedcheck(False)
ValueError: cannot include dtype 'M' in a buffer

The question is does someone know why the exception changed in Cython3? I
was not able to find out. Is this a feature or is it a bug? Interestingly,
I was not able to replicate this behaviour in simple fused types containing
basic types (int, float etc...).


Thanks,

Matus

[1] https://github.com/scipy/scipy/pull/18242#issuecomment-1517459666
_______________________________________________
cython-devel mailing list
cython-devel@python.org
https://mail.python.org/mailman/listinfo/cython-devel

Reply via email to