This is following the discussion on bug
http://projects.scipy.org/numpy/ticket/2017
Essentially, there is a discrepency between the actual type of the
flags member in the dtype C structure (char) and how it is declared in
the descriptor table (T_INT). The problem is that we are damned if we
fix it, damned if we are not:
- fixing T_INT to T_BYTE. flag in python is now fixed, but it breaks
pickled numpy arrays
- not fixing it means that the value is broken at the python level.
Changing the flag to be an actual int would break the ABI.
I currently have this: https://github.com/numpy/numpy/pull/228
Which one is the more appropriate ? Maybe a deprecation warning for
1.7 and change it in 1.8 ?
Note that we can fix the hash issue with either solution,
David
_______________________________________________
NumPy-Discussion mailing list
NumPy-Di...@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion
Is the problem that T_BYTE returns a single-item string? My
handwrapping skills are rusty (Cython has blissfully eradicated this
from my memory), but aren't these T_INT/T_BYTE things just convenient
shortcuts for exposing C struct members as Python attributes? Couldn't
we just write a full getter function for returning the correct value,
just returned as a Python int instead of a str.
--
Robert Kern
Yes (although it is actually what we want, instead of an int).
> My handwrapping skills are rusty (Cython has blissfully eradicated this
> from my memory), but aren't these T_INT/T_BYTE things just convenient
> shortcuts for exposing C struct members as Python attributes? Couldn't
> we just write a full getter function for returning the correct value,
> just returned as a Python int instead of a str.
You're right, I did not think about this solution. That's certainly
better than the two I suggested.
Thanks,
David
There is a need for more flags on the dtype object. Using an actual attribute call seems like the way to go. This could even merge the contents of two struct members so that we can add more flags but preserve ABI compatibility.
Travis
--
Travis Oliphant
(on a mobile)
512-826-7480
I suspect just to ensure that any provided value fits in the range
0..255. But that's easily done explicitly.
--
Robert Kern
Yes. The T_BYTE/T_INT is actually pretty minor compared to the
underlying issue (where we cast back and forth between int and char).
I will make a new PR that fixes everything but this exact point, and
will put an actual accessor if needed. Given that dtype.flags is
nonsensical as of today (at the python level), I would expect nobody
uses it.
cheers,
On Tue, Mar 6, 2012 at 18:25, Travis Oliphant <tra...@continuum.io> wrote:I suspect just to ensure that any provided value fits in the range
> Why do we want to return a single string char instead of an int?
0..255. But that's easily done explicitly.