[Cython] redefining PyIndex_Check

Stefan Behnel stefan_ml at behnel.de
Sun Nov 11 14:04:45 CET 2012

mark florisson, 11.11.2012 12:26:
> On 11 November 2012 08:12, Stefan Behnel wrote:
>> instead of overriding an existing definition of "PyIndex_Check" like this:
>> """
>> +#if PY_VERSION_HEX < 0x02050000
>> +    /* NumPy headers define PyIndex_Check incorrectly */
>> +    #undef PyIndex_Check
>> +    #define PyIndex_Check(o) (PyNumber_Check(o) && !PyFloat_Check(o) &&
>> !PyComplex_Check(o))
>> +#endif
>> """
>> which may or may not have come from NumPy, shouldn't we be using our own
>> definition of a "__Pyx_PyIndex_Check" in our code instead?
> I thought about that, but then people do expect PyIndex_Check to work
> when they cimport it from cpython. But this fix doesn't really address
> that either, it just works if you use memoryviews (it's more of a
> quick and dirty hack, this fix needs to be associated with the cimport
> of numpy).
> Maybe we should use __Pyx_PyIndex_Check internally, and define
> PyIndex_Check like we do now for user convenience, and let numpy break
> it?

+1 for all three points. Cython's own code should always be safe, users
won't normally use that function anyway and NumPy would only break their
code in Py2.4, which is sufficiently rarely used.

BTW, has anyone brought this to the attention of the NumPy developers yet?
They might want to fix their definition.


More information about the cython-devel mailing list