[Numpy-discussion] Should object arrays have a buffer interface?

Robert Kern robert.kern@gmail....
Sun Dec 28 21:28:53 CST 2008


On Sun, Dec 28, 2008 at 21:52, Andreas Klöckner <lists@informa.tiker.net> wrote:
> On Montag 29 Dezember 2008, Robert Kern wrote:
>> On Sun, Dec 28, 2008 at 20:38, Andreas Klöckner <lists@informa.tiker.net>
> wrote:
>> > On Montag 29 Dezember 2008, Robert Kern wrote:
>> >> On Sun, Dec 28, 2008 at 19:23, Andreas Klöckner
>> >> <lists@informa.tiker.net>
>> >
>> > 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
bytes.

-- 
Robert Kern

"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 mailing list