• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 .. highlight:: c
2 
3 .. index::
4    single: buffer protocol
5    single: buffer interface; (see buffer protocol)
6    single: buffer object; (see buffer protocol)
7 
8 .. _bufferobjects:
9 
10 Buffer Protocol
11 ---------------
12 
13 .. sectionauthor:: Greg Stein <gstein@lyra.org>
14 .. sectionauthor:: Benjamin Peterson
15 .. sectionauthor:: Stefan Krah
16 
17 
18 Certain objects available in Python wrap access to an underlying memory
19 array or *buffer*.  Such objects include the built-in :class:`bytes` and
20 :class:`bytearray`, and some extension types like :class:`array.array`.
21 Third-party libraries may define their own types for special purposes, such
22 as image processing or numeric analysis.
23 
24 While each of these types have their own semantics, they share the common
25 characteristic of being backed by a possibly large memory buffer.  It is
26 then desirable, in some situations, to access that buffer directly and
27 without intermediate copying.
28 
29 Python provides such a facility at the C level in the form of the :ref:`buffer
30 protocol <bufferobjects>`.  This protocol has two sides:
31 
32 .. index:: single: PyBufferProcs
33 
34 - on the producer side, a type can export a "buffer interface" which allows
35   objects of that type to expose information about their underlying buffer.
36   This interface is described in the section :ref:`buffer-structs`;
37 
38 - on the consumer side, several means are available to obtain a pointer to
39   the raw underlying data of an object (for example a method parameter).
40 
41 Simple objects such as :class:`bytes` and :class:`bytearray` expose their
42 underlying buffer in byte-oriented form.  Other forms are possible; for example,
43 the elements exposed by an :class:`array.array` can be multi-byte values.
44 
45 An example consumer of the buffer interface is the :meth:`~io.BufferedIOBase.write`
46 method of file objects: any object that can export a series of bytes through
47 the buffer interface can be written to a file.  While :meth:`write` only
48 needs read-only access to the internal contents of the object passed to it,
49 other methods such as :meth:`~io.BufferedIOBase.readinto` need write access
50 to the contents of their argument.  The buffer interface allows objects to
51 selectively allow or reject exporting of read-write and read-only buffers.
52 
53 There are two ways for a consumer of the buffer interface to acquire a buffer
54 over a target object:
55 
56 * call :c:func:`PyObject_GetBuffer` with the right parameters;
57 
58 * call :c:func:`PyArg_ParseTuple` (or one of its siblings) with one of the
59   ``y*``, ``w*`` or ``s*`` :ref:`format codes <arg-parsing>`.
60 
61 In both cases, :c:func:`PyBuffer_Release` must be called when the buffer
62 isn't needed anymore.  Failure to do so could lead to various issues such as
63 resource leaks.
64 
65 
66 .. _buffer-structure:
67 
68 Buffer structure
69 ================
70 
71 Buffer structures (or simply "buffers") are useful as a way to expose the
72 binary data from another object to the Python programmer.  They can also be
73 used as a zero-copy slicing mechanism.  Using their ability to reference a
74 block of memory, it is possible to expose any data to the Python programmer
75 quite easily.  The memory could be a large, constant array in a C extension,
76 it could be a raw block of memory for manipulation before passing to an
77 operating system library, or it could be used to pass around structured data
78 in its native, in-memory format.
79 
80 Contrary to most data types exposed by the Python interpreter, buffers
81 are not :c:type:`PyObject` pointers but rather simple C structures.  This
82 allows them to be created and copied very simply.  When a generic wrapper
83 around a buffer is needed, a :ref:`memoryview <memoryview-objects>` object
84 can be created.
85 
86 For short instructions how to write an exporting object, see
87 :ref:`Buffer Object Structures <buffer-structs>`. For obtaining
88 a buffer, see :c:func:`PyObject_GetBuffer`.
89 
90 .. c:type:: Py_buffer
91 
92    .. c:member:: void *buf
93 
94       A pointer to the start of the logical structure described by the buffer
95       fields. This can be any location within the underlying physical memory
96       block of the exporter. For example, with negative :c:member:`~Py_buffer.strides`
97       the value may point to the end of the memory block.
98 
99       For :term:`contiguous` arrays, the value points to the beginning of
100       the memory block.
101 
102    .. c:member:: void *obj
103 
104       A new reference to the exporting object. The reference is owned by
105       the consumer and automatically decremented and set to ``NULL`` by
106       :c:func:`PyBuffer_Release`. The field is the equivalent of the return
107       value of any standard C-API function.
108 
109       As a special case, for *temporary* buffers that are wrapped by
110       :c:func:`PyMemoryView_FromBuffer` or :c:func:`PyBuffer_FillInfo`
111       this field is ``NULL``. In general, exporting objects MUST NOT
112       use this scheme.
113 
114    .. c:member:: Py_ssize_t len
115 
116       ``product(shape) * itemsize``. For contiguous arrays, this is the length
117       of the underlying memory block. For non-contiguous arrays, it is the length
118       that the logical structure would have if it were copied to a contiguous
119       representation.
120 
121       Accessing ``((char *)buf)[0] up to ((char *)buf)[len-1]`` is only valid
122       if the buffer has been obtained by a request that guarantees contiguity. In
123       most cases such a request will be :c:macro:`PyBUF_SIMPLE` or :c:macro:`PyBUF_WRITABLE`.
124 
125    .. c:member:: int readonly
126 
127       An indicator of whether the buffer is read-only. This field is controlled
128       by the :c:macro:`PyBUF_WRITABLE` flag.
129 
130    .. c:member:: Py_ssize_t itemsize
131 
132       Item size in bytes of a single element. Same as the value of :func:`struct.calcsize`
133       called on non-``NULL`` :c:member:`~Py_buffer.format` values.
134 
135       Important exception: If a consumer requests a buffer without the
136       :c:macro:`PyBUF_FORMAT` flag, :c:member:`~Py_buffer.format` will
137       be set to  ``NULL``,  but :c:member:`~Py_buffer.itemsize` still has
138       the value for the original format.
139 
140       If :c:member:`~Py_buffer.shape` is present, the equality
141       ``product(shape) * itemsize == len`` still holds and the consumer
142       can use :c:member:`~Py_buffer.itemsize` to navigate the buffer.
143 
144       If :c:member:`~Py_buffer.shape` is ``NULL`` as a result of a :c:macro:`PyBUF_SIMPLE`
145       or a :c:macro:`PyBUF_WRITABLE` request, the consumer must disregard
146       :c:member:`~Py_buffer.itemsize` and assume ``itemsize == 1``.
147 
148    .. c:member:: const char *format
149 
150       A *NUL* terminated string in :mod:`struct` module style syntax describing
151       the contents of a single item. If this is ``NULL``, ``"B"`` (unsigned bytes)
152       is assumed.
153 
154       This field is controlled by the :c:macro:`PyBUF_FORMAT` flag.
155 
156    .. c:member:: int ndim
157 
158       The number of dimensions the memory represents as an n-dimensional array.
159       If it is ``0``, :c:member:`~Py_buffer.buf` points to a single item representing
160       a scalar. In this case, :c:member:`~Py_buffer.shape`, :c:member:`~Py_buffer.strides`
161       and :c:member:`~Py_buffer.suboffsets` MUST be ``NULL``.
162 
163       The macro :c:macro:`PyBUF_MAX_NDIM` limits the maximum number of dimensions
164       to 64. Exporters MUST respect this limit, consumers of multi-dimensional
165       buffers SHOULD be able to handle up to :c:macro:`PyBUF_MAX_NDIM` dimensions.
166 
167    .. c:member:: Py_ssize_t *shape
168 
169       An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`
170       indicating the shape of the memory as an n-dimensional array. Note that
171       ``shape[0] * ... * shape[ndim-1] * itemsize`` MUST be equal to
172       :c:member:`~Py_buffer.len`.
173 
174       Shape values are restricted to ``shape[n] >= 0``. The case
175       ``shape[n] == 0`` requires special attention. See `complex arrays`_
176       for further information.
177 
178       The shape array is read-only for the consumer.
179 
180    .. c:member:: Py_ssize_t *strides
181 
182       An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`
183       giving the number of bytes to skip to get to a new element in each
184       dimension.
185 
186       Stride values can be any integer. For regular arrays, strides are
187       usually positive, but a consumer MUST be able to handle the case
188       ``strides[n] <= 0``. See `complex arrays`_ for further information.
189 
190       The strides array is read-only for the consumer.
191 
192    .. c:member:: Py_ssize_t *suboffsets
193 
194       An array of :c:type:`Py_ssize_t` of length :c:member:`~Py_buffer.ndim`.
195       If ``suboffsets[n] >= 0``, the values stored along the nth dimension are
196       pointers and the suboffset value dictates how many bytes to add to each
197       pointer after de-referencing. A suboffset value that is negative
198       indicates that no de-referencing should occur (striding in a contiguous
199       memory block).
200 
201       If all suboffsets are negative (i.e. no de-referencing is needed), then
202       this field must be ``NULL`` (the default value).
203 
204       This type of array representation is used by the Python Imaging Library
205       (PIL). See `complex arrays`_ for further information how to access elements
206       of such an array.
207 
208       The suboffsets array is read-only for the consumer.
209 
210    .. c:member:: void *internal
211 
212       This is for use internally by the exporting object. For example, this
213       might be re-cast as an integer by the exporter and used to store flags
214       about whether or not the shape, strides, and suboffsets arrays must be
215       freed when the buffer is released. The consumer MUST NOT alter this
216       value.
217 
218 .. _buffer-request-types:
219 
220 Buffer request types
221 ====================
222 
223 Buffers are usually obtained by sending a buffer request to an exporting
224 object via :c:func:`PyObject_GetBuffer`. Since the complexity of the logical
225 structure of the memory can vary drastically, the consumer uses the *flags*
226 argument to specify the exact buffer type it can handle.
227 
228 All :c:data:`Py_buffer` fields are unambiguously defined by the request
229 type.
230 
231 request-independent fields
232 ~~~~~~~~~~~~~~~~~~~~~~~~~~
233 The following fields are not influenced by *flags* and must always be filled in
234 with the correct values: :c:member:`~Py_buffer.obj`, :c:member:`~Py_buffer.buf`,
235 :c:member:`~Py_buffer.len`, :c:member:`~Py_buffer.itemsize`, :c:member:`~Py_buffer.ndim`.
236 
237 
238 readonly, format
239 ~~~~~~~~~~~~~~~~
240 
241    .. c:macro:: PyBUF_WRITABLE
242 
243       Controls the :c:member:`~Py_buffer.readonly` field. If set, the exporter
244       MUST provide a writable buffer or else report failure. Otherwise, the
245       exporter MAY provide either a read-only or writable buffer, but the choice
246       MUST be consistent for all consumers.
247 
248    .. c:macro:: PyBUF_FORMAT
249 
250       Controls the :c:member:`~Py_buffer.format` field. If set, this field MUST
251       be filled in correctly. Otherwise, this field MUST be ``NULL``.
252 
253 
254 :c:macro:`PyBUF_WRITABLE` can be \|'d to any of the flags in the next section.
255 Since :c:macro:`PyBUF_SIMPLE` is defined as 0, :c:macro:`PyBUF_WRITABLE`
256 can be used as a stand-alone flag to request a simple writable buffer.
257 
258 :c:macro:`PyBUF_FORMAT` can be \|'d to any of the flags except :c:macro:`PyBUF_SIMPLE`.
259 The latter already implies format ``B`` (unsigned bytes).
260 
261 
262 shape, strides, suboffsets
263 ~~~~~~~~~~~~~~~~~~~~~~~~~~
264 
265 The flags that control the logical structure of the memory are listed
266 in decreasing order of complexity. Note that each flag contains all bits
267 of the flags below it.
268 
269 .. tabularcolumns:: |p{0.35\linewidth}|l|l|l|
270 
271 +-----------------------------+-------+---------+------------+
272 |  Request                    | shape | strides | suboffsets |
273 +=============================+=======+=========+============+
274 | .. c:macro:: PyBUF_INDIRECT |  yes  |   yes   | if needed  |
275 +-----------------------------+-------+---------+------------+
276 | .. c:macro:: PyBUF_STRIDES  |  yes  |   yes   |    NULL    |
277 +-----------------------------+-------+---------+------------+
278 | .. c:macro:: PyBUF_ND       |  yes  |   NULL  |    NULL    |
279 +-----------------------------+-------+---------+------------+
280 | .. c:macro:: PyBUF_SIMPLE   |  NULL |   NULL  |    NULL    |
281 +-----------------------------+-------+---------+------------+
282 
283 
284 .. index:: contiguous, C-contiguous, Fortran contiguous
285 
286 contiguity requests
287 ~~~~~~~~~~~~~~~~~~~
288 
289 C or Fortran :term:`contiguity <contiguous>` can be explicitly requested,
290 with and without stride information. Without stride information, the buffer
291 must be C-contiguous.
292 
293 .. tabularcolumns:: |p{0.35\linewidth}|l|l|l|l|
294 
295 +-----------------------------------+-------+---------+------------+--------+
296 |  Request                          | shape | strides | suboffsets | contig |
297 +===================================+=======+=========+============+========+
298 | .. c:macro:: PyBUF_C_CONTIGUOUS   |  yes  |   yes   |    NULL    |   C    |
299 +-----------------------------------+-------+---------+------------+--------+
300 | .. c:macro:: PyBUF_F_CONTIGUOUS   |  yes  |   yes   |    NULL    |   F    |
301 +-----------------------------------+-------+---------+------------+--------+
302 | .. c:macro:: PyBUF_ANY_CONTIGUOUS |  yes  |   yes   |    NULL    | C or F |
303 +-----------------------------------+-------+---------+------------+--------+
304 | :c:macro:`PyBUF_ND`               |  yes  |   NULL  |    NULL    |   C    |
305 +-----------------------------------+-------+---------+------------+--------+
306 
307 
308 compound requests
309 ~~~~~~~~~~~~~~~~~
310 
311 All possible requests are fully defined by some combination of the flags in
312 the previous section. For convenience, the buffer protocol provides frequently
313 used combinations as single flags.
314 
315 In the following table *U* stands for undefined contiguity. The consumer would
316 have to call :c:func:`PyBuffer_IsContiguous` to determine contiguity.
317 
318 .. tabularcolumns:: |p{0.35\linewidth}|l|l|l|l|l|l|
319 
320 +-------------------------------+-------+---------+------------+--------+----------+--------+
321 |  Request                      | shape | strides | suboffsets | contig | readonly | format |
322 +===============================+=======+=========+============+========+==========+========+
323 | .. c:macro:: PyBUF_FULL       |  yes  |   yes   | if needed  |   U    |     0    |  yes   |
324 +-------------------------------+-------+---------+------------+--------+----------+--------+
325 | .. c:macro:: PyBUF_FULL_RO    |  yes  |   yes   | if needed  |   U    |  1 or 0  |  yes   |
326 +-------------------------------+-------+---------+------------+--------+----------+--------+
327 | .. c:macro:: PyBUF_RECORDS    |  yes  |   yes   |    NULL    |   U    |     0    |  yes   |
328 +-------------------------------+-------+---------+------------+--------+----------+--------+
329 | .. c:macro:: PyBUF_RECORDS_RO |  yes  |   yes   |    NULL    |   U    |  1 or 0  |  yes   |
330 +-------------------------------+-------+---------+------------+--------+----------+--------+
331 | .. c:macro:: PyBUF_STRIDED    |  yes  |   yes   |    NULL    |   U    |     0    |  NULL  |
332 +-------------------------------+-------+---------+------------+--------+----------+--------+
333 | .. c:macro:: PyBUF_STRIDED_RO |  yes  |   yes   |    NULL    |   U    |  1 or 0  |  NULL  |
334 +-------------------------------+-------+---------+------------+--------+----------+--------+
335 | .. c:macro:: PyBUF_CONTIG     |  yes  |   NULL  |    NULL    |   C    |     0    |  NULL  |
336 +-------------------------------+-------+---------+------------+--------+----------+--------+
337 | .. c:macro:: PyBUF_CONTIG_RO  |  yes  |   NULL  |    NULL    |   C    |  1 or 0  |  NULL  |
338 +-------------------------------+-------+---------+------------+--------+----------+--------+
339 
340 
341 Complex arrays
342 ==============
343 
344 NumPy-style: shape and strides
345 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
346 
347 The logical structure of NumPy-style arrays is defined by :c:member:`~Py_buffer.itemsize`,
348 :c:member:`~Py_buffer.ndim`, :c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides`.
349 
350 If ``ndim == 0``, the memory location pointed to by :c:member:`~Py_buffer.buf` is
351 interpreted as a scalar of size :c:member:`~Py_buffer.itemsize`. In that case,
352 both :c:member:`~Py_buffer.shape` and :c:member:`~Py_buffer.strides` are ``NULL``.
353 
354 If :c:member:`~Py_buffer.strides` is ``NULL``, the array is interpreted as
355 a standard n-dimensional C-array. Otherwise, the consumer must access an
356 n-dimensional array as follows:
357 
358 .. code-block:: c
359 
360    ptr = (char *)buf + indices[0] * strides[0] + ... + indices[n-1] * strides[n-1];
361    item = *((typeof(item) *)ptr);
362 
363 
364 As noted above, :c:member:`~Py_buffer.buf` can point to any location within
365 the actual memory block. An exporter can check the validity of a buffer with
366 this function:
367 
368 .. code-block:: python
369 
370    def verify_structure(memlen, itemsize, ndim, shape, strides, offset):
371        """Verify that the parameters represent a valid array within
372           the bounds of the allocated memory:
373               char *mem: start of the physical memory block
374               memlen: length of the physical memory block
375               offset: (char *)buf - mem
376        """
377        if offset % itemsize:
378            return False
379        if offset < 0 or offset+itemsize > memlen:
380            return False
381        if any(v % itemsize for v in strides):
382            return False
383 
384        if ndim <= 0:
385            return ndim == 0 and not shape and not strides
386        if 0 in shape:
387            return True
388 
389        imin = sum(strides[j]*(shape[j]-1) for j in range(ndim)
390                   if strides[j] <= 0)
391        imax = sum(strides[j]*(shape[j]-1) for j in range(ndim)
392                   if strides[j] > 0)
393 
394        return 0 <= offset+imin and offset+imax+itemsize <= memlen
395 
396 
397 PIL-style: shape, strides and suboffsets
398 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
399 
400 In addition to the regular items, PIL-style arrays can contain pointers
401 that must be followed in order to get to the next element in a dimension.
402 For example, the regular three-dimensional C-array ``char v[2][2][3]`` can
403 also be viewed as an array of 2 pointers to 2 two-dimensional arrays:
404 ``char (*v[2])[2][3]``. In suboffsets representation, those two pointers
405 can be embedded at the start of :c:member:`~Py_buffer.buf`, pointing
406 to two ``char x[2][3]`` arrays that can be located anywhere in memory.
407 
408 
409 Here is a function that returns a pointer to the element in an N-D array
410 pointed to by an N-dimensional index when there are both non-``NULL`` strides
411 and suboffsets::
412 
413    void *get_item_pointer(int ndim, void *buf, Py_ssize_t *strides,
414                           Py_ssize_t *suboffsets, Py_ssize_t *indices) {
415        char *pointer = (char*)buf;
416        int i;
417        for (i = 0; i < ndim; i++) {
418            pointer += strides[i] * indices[i];
419            if (suboffsets[i] >=0 ) {
420                pointer = *((char**)pointer) + suboffsets[i];
421            }
422        }
423        return (void*)pointer;
424    }
425 
426 
427 Buffer-related functions
428 ========================
429 
430 .. c:function:: int PyObject_CheckBuffer(PyObject *obj)
431 
432    Return ``1`` if *obj* supports the buffer interface otherwise ``0``.  When ``1`` is
433    returned, it doesn't guarantee that :c:func:`PyObject_GetBuffer` will
434    succeed.  This function always succeeds.
435 
436 
437 .. c:function:: int PyObject_GetBuffer(PyObject *exporter, Py_buffer *view, int flags)
438 
439    Send a request to *exporter* to fill in *view* as specified by  *flags*.
440    If the exporter cannot provide a buffer of the exact type, it MUST raise
441    :c:data:`PyExc_BufferError`, set ``view->obj`` to ``NULL`` and
442    return ``-1``.
443 
444    On success, fill in *view*, set ``view->obj`` to a new reference
445    to *exporter* and return 0. In the case of chained buffer providers
446    that redirect requests to a single object, ``view->obj`` MAY
447    refer to this object instead of *exporter* (See :ref:`Buffer Object Structures <buffer-structs>`).
448 
449    Successful calls to :c:func:`PyObject_GetBuffer` must be paired with calls
450    to :c:func:`PyBuffer_Release`, similar to :c:func:`malloc` and :c:func:`free`.
451    Thus, after the consumer is done with the buffer, :c:func:`PyBuffer_Release`
452    must be called exactly once.
453 
454 
455 .. c:function:: void PyBuffer_Release(Py_buffer *view)
456 
457    Release the buffer *view* and decrement the reference count for
458    ``view->obj``. This function MUST be called when the buffer
459    is no longer being used, otherwise reference leaks may occur.
460 
461    It is an error to call this function on a buffer that was not obtained via
462    :c:func:`PyObject_GetBuffer`.
463 
464 
465 .. c:function:: Py_ssize_t PyBuffer_SizeFromFormat(const char *format)
466 
467    Return the implied :c:data:`~Py_buffer.itemsize` from :c:data:`~Py_buffer.format`.
468    On error, raise an exception and return -1.
469 
470    .. versionadded:: 3.9
471 
472 
473 .. c:function:: int PyBuffer_IsContiguous(Py_buffer *view, char order)
474 
475    Return ``1`` if the memory defined by the *view* is C-style (*order* is
476    ``'C'``) or Fortran-style (*order* is ``'F'``) :term:`contiguous` or either one
477    (*order* is ``'A'``).  Return ``0`` otherwise.  This function always succeeds.
478 
479 
480 .. c:function:: void* PyBuffer_GetPointer(Py_buffer *view, Py_ssize_t *indices)
481 
482    Get the memory area pointed to by the *indices* inside the given *view*.
483    *indices* must point to an array of ``view->ndim`` indices.
484 
485 
486 .. c:function:: int PyBuffer_FromContiguous(Py_buffer *view, void *buf, Py_ssize_t len, char fort)
487 
488    Copy contiguous *len* bytes from *buf* to *view*.
489    *fort* can be ``'C'`` or ``'F'`` (for C-style or Fortran-style ordering).
490    ``0`` is returned on success, ``-1`` on error.
491 
492 
493 .. c:function:: int PyBuffer_ToContiguous(void *buf, Py_buffer *src, Py_ssize_t len, char order)
494 
495    Copy *len* bytes from *src* to its contiguous representation in *buf*.
496    *order* can be ``'C'`` or ``'F'`` or ``'A'`` (for C-style or Fortran-style
497    ordering or either one). ``0`` is returned on success, ``-1`` on error.
498 
499    This function fails if *len* != *src->len*.
500 
501 
502 .. c:function:: void PyBuffer_FillContiguousStrides(int ndims, Py_ssize_t *shape, Py_ssize_t *strides, int itemsize, char order)
503 
504    Fill the *strides* array with byte-strides of a :term:`contiguous` (C-style if
505    *order* is ``'C'`` or Fortran-style if *order* is ``'F'``) array of the
506    given shape with the given number of bytes per element.
507 
508 
509 .. c:function:: int PyBuffer_FillInfo(Py_buffer *view, PyObject *exporter, void *buf, Py_ssize_t len, int readonly, int flags)
510 
511    Handle buffer requests for an exporter that wants to expose *buf* of size *len*
512    with writability set according to *readonly*. *buf* is interpreted as a sequence
513    of unsigned bytes.
514 
515    The *flags* argument indicates the request type. This function always fills in
516    *view* as specified by flags, unless *buf* has been designated as read-only
517    and :c:macro:`PyBUF_WRITABLE` is set in *flags*.
518 
519    On success, set ``view->obj`` to a new reference to *exporter* and
520    return 0. Otherwise, raise :c:data:`PyExc_BufferError`, set
521    ``view->obj`` to ``NULL`` and return ``-1``;
522 
523    If this function is used as part of a :ref:`getbufferproc <buffer-structs>`,
524    *exporter* MUST be set to the exporting object and *flags* must be passed
525    unmodified. Otherwise, *exporter* MUST be ``NULL``.
526