[Numpy-tickets] [NumPy] #598: incorrect behaviour with ( "%d"%a[i]) on uint64
NumPy
numpy-tickets@scipy....
Tue Oct 30 11:44:36 CDT 2007
#598: incorrect behaviour with ( "%d"%a[i]) on uint64
--------------------------+-------------------------------------------------
Reporter: gregsmith_to | Owner: somebody
Type: defect | Status: reopened
Priority: normal | Milestone: 1.0.4
Component: Other | Version: 1.0.2
Severity: normal | Resolution:
Keywords: |
--------------------------+-------------------------------------------------
Comment (by gregsmith_to):
I've looked into it more deeply, and it looks to me that numpy is now
working properly on 1.04, and this undesirable behaviour is due to a
Python problem. Sorry about the hassle.
I've been operating on an incorrect assumption about how %d works, and why
the exception is raised.
Looking through the python 2.5 source, that exception is raised by "%d"
etc when {{{PyInt_AsLong}}} fails to convert the object (this is only
tried when the object is not a python long to begin with). Although
{{{PyInt_AsLong}}} is capable of converting general objects (it calls the
'int' conversion if present), it returns a C long, and is therefore not
capable of handling the uint64 case properly in general (or even uint32 on
a 32-bit machine). It supports an int conversion which actually produces a
python Long: if it calls the nb_int conversion method of a type, and that
returns a python long, it then tries to get the value of that long as a C
long, and if that fails because the value is out of range the exception is
raised. So, it looks like in 1.04 "%d" % a[0] will work when the value
fits in a C long, and raise an exception when it doesn't, which is the
best available behaviour without fixing Python. And it should work
properly when Python is fixed, so that %d handles general objects which
convert to python longs.
Please close.
--
Ticket URL: <http://scipy.org/scipy/numpy/ticket/598#comment:6>
NumPy <http://projects.scipy.org/scipy/numpy>
The fundamental package needed for scientific computing with Python.
More information about the Numpy-tickets
mailing list