[Python-Dev] Allocation of shape and strides fields in Py_buffer (original) (raw)

Antoine Pitrou solipsis at pitrou.net
Tue Dec 9 15:27:56 CET 2008


Le mardi 09 décembre 2008 à 22:33 +1000, Nick Coghlan a écrit :

I have zero problem whatsoever if slice assignment TO a memoryview object is permitted only if the shape stays the same (i.e. I think that issue should be closed as "not a bug").

I'm not even talking about slice /assignment/ here, just read-only slicing. Slicing a memoryview must produce another memoryview with a different shape but with the same underlying object. That's why I have to modify the shape field /after/ the new Py_buffer is initialized.

The buffer protocol permits you to edit the DATA held by another object. It doesn't let you edit the structure of that object

Perhaps, but it's necessary for slicing.

The first is that memoryview is treating the len field in the Pybuffer struct as the number of objects in the view in a few places instead of as the total number of bytes being exposed (it is actually the latter, as defined in PEP 3118).

I don't understand the difference between "the number of objects in the view" and "the total number of bytes being exposed". For me it should be the same and the "buf" and "len" fields in the Py_buffer should be usable by any other C function, otherwise they are useless.

memoryview also currently gets the shape wrong on slices:

I know, that's what I'm trying to fix...



More information about the Python-Dev mailing list