On Tue, 01 Feb 2011 16:42:04 -0800, Mark Wiebe wrote: [clip: problem 1] > This looks like it's a problem in new_iterator_pywrap.c, in > PySequenceMethods npyiter_as_sequence. I got this error when trying to > slice before implementing the slot sq_slice. I copied the definition > from array_as_sequence, which I thought would already have any > adjustments for Py3. The value in that slot shouldn't be NULL, though, > so I don't know why it's giving the error, maybe the struct definition > changed, and somehow in the array sequence methods that gets masked? Or > maybe the assignment slice slot needs to be filled as well, but that > doesn't seem right to me.
The slot sq_slice is in the struct on Python 3, but the entry is a dummy no-op. It appears slices are supposed to be handled in PyMappingMethod. (If you walk through the __getitem__ code for ndarray, you'll note that if it encounters a single slice, it falls back to calling the PySequence methods :O) The Python C-API docs don't seem to say much on the status of sq_slice on Python 2, but at least on the Python side I know that the corresponding __*slice__ hooks are deprecated in favor of the __*item__ routines since Python 2.6. [clip: problem 2] > I see, in Py3 oct and hex call array_index instead of array_oct and > array_hex. This is because the __oct__ and __hex__ C-slots were removed from PyNumberMethods on Py3. > I think changing the self-reference exceptions in > int/long/float/oct/hex to TypeError instead of ValueError is probably > a good way to make this consistent. Probably a good idea, since the other errors there are also TypeErrors. Pauli _______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion