-
Notifications
You must be signed in to change notification settings - Fork 10
Description
When numpy.random.RandomState.multinomial is called in an environment with Cython<3.0.0 (currently, we use 0.29.34), it accepts non-integer n values with no problem (source code for reference). However, something changes in Cython>=3.0.0 which causes the multinomial function to raise an error when n is not an integer. In our model, this happens in at least four places: here, here, here, and here. The solution on our end is probably just to cast each of our n arguments to int once we upgrade Cython.
Digging deeper into the issue, I noticed that the TypeError for floating point values is only raised when a Cython function has a parameter of the type np.npy_intp. If the parameter has any other integer type (e.g. int, long, np.npy_int), it is simply cast to int with no errors raised.
import numpy as np
cimport numpy as np
def func(int length):
# func(1.1) returns 1
return length
def weird_func(np.npy_intp length):
# weird_func(1.1) raises TypeError: 'float' object cannot be interpreted as an integer
return lengthDoes anyone know if this issue is platform-specific (I tested on Ubuntu 22.04 x86) or intended behavior?