[Numpy-discussion] Should object arrays have a buffer interface?
Sun Dec 28 21:28:53 CST 2008
On Sun, Dec 28, 2008 at 21:52, Andreas Klöckner <email@example.com> wrote:
> On Montag 29 Dezember 2008, Robert Kern wrote:
>> On Sun, Dec 28, 2008 at 20:38, Andreas Klöckner <firstname.lastname@example.org>
>> > On Montag 29 Dezember 2008, Robert Kern wrote:
>> >> On Sun, Dec 28, 2008 at 19:23, Andreas Klöckner
>> >> <email@example.com>
>> > wrote:
>> >> > Hi all,
>> >> >
>> >> > I don't think PyObject pointers should be accessible via the buffer
>> >> > interface. I'd throw an error, but maybe a (silenceable) warning would
>> >> > do. Would have saved me some bug-hunting.
>> >> Can you describe in more detail what problem it caused?
>> > Well, I'm a little bit embarrassed. :) But here goes.
>> > I have one-line MPI wrappers that build on Boost.MPI and Boost.Python.
>> > They take a numpy array, obtain its buffer, and shove that into
>> > Boost.MPI's isend().
>> How do you communicate the dtype?
> I don't. The app is a PDE solver, both ends are working at the same (known)
> precision. Passing an object array was completely wrong, but since my wrapper
> functions only deal with the buffer API, they couldn't really do the checking.
You could wrap the wrappers in Python and check the dtype. You'd have
a similar bug if you passed a wrong non-object dtype, too.
Checking/communicating the dtype is something you always have to do
when using the 2.x buffer protocol. I'm inclined not to make object a
special case. When you ask for the raw bytes, you should get the raw
"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
-- Umberto Eco
More information about the Numpy-discussion