Robert Bradshaw wrote:
> On Jun 6, 2009, at 2:20 AM, Dag Sverre Seljebotn wrote:
>
>> Eric Firing wrote:
>>> Eric Firing wrote:
>>>> In writing a cython extension to work with numpy masked arrays, I
>>>> needed to work with the mask, which is dtype('bool'). Therefore I
>>>> was expecting to be able to use np.bool_t, in analogy to np.float_t.
>>>> Instead I had to use np.int8_t, and cast the input to np.int8 in a
>>>> python wrapper. Can bool_t be added to numpy.pxd?
>>>>
>>>> Thanks.
>>>>
>>>> Eric
>> The reason it is not there is that AFAIK Cython has no support for an
>> 8-bit boolean type. I.e. you want
>>
>> print arr[3] # should print "True", not 1.
>>
>> and furthermore you want
>>
>> arr[3] = obj # should mean arr[3] = bool(obj)
>>
>> Which brings up the questions
>> 1) I suppose the best thing would be to add support for a "bool" which
>> would be a C99 _Bool if compiling on C99, and "unsigned char" with
>> appropriate restrictions otherwise. Thoughts?
>
> How would this relate to the current bint type? bint is an int
> because logical operations in C are ints, and also several operations
> in the Python/C API (and elsewhere) return true/false values as ints.
Well, bint is an int that has different semantics for conversion to/from
Python, and that seems to be needed here as well (e.g. a "bchar", which I
think is essentially C99 _Bool).
What happens if you do "cdef bint value = 4"? Is bool(4) called resulting
in 1 being placed in value? I think that's the wanted behaviour here...
Using bint directly seems to be right out though as one must access the
data using an 8-bit integer type. (Well, I could hard-code buffers to cast
back and forth between "bint" and "char", after the pointer dereference,
but that seems very unclean compared to introducing a new type).
Perhaps we should have "char bint", "short bint", "unsigned long long
bint" and so on :-) Really, the need for a seperate type for bools is a
strict Cython feature, because what it affects is Python object
conversion, so it doesn't hurt IMO that these are not in C. And size and
booleanness are orthogonal features. (But, this is a puristic approach
only, and in practice "bchar" would suffice.)
Dag Sverre
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev