Lines Matching refs:view
36 allows the underlying object to change while a view is exported. This
63 return a new reference to view.obj (example: bytes_buffer_getbuffer()).
65 PyBuffer_Release() decrements view.obj (if non-NULL), so the
66 releasebufferprocs must NOT decrement view.obj.
208 #define VIEW_ADDR(mv) (&((PyMemoryViewObject *)mv)->view)
224 #define MV_CONTIGUOUS_NDIM1(view) \
225 ((view)->shape[0] == 1 || (view)->strides[0] == (view)->itemsize)
252 #define HAVE_SUBOFFSETS_IN_LAST_DIM(view) \
253 (view->suboffsets && view->suboffsets[dest->ndim-1] >= 0)
452 init_strides_from_shape(Py_buffer *view)
456 assert(view->ndim > 0);
458 view->strides[view->ndim-1] = view->itemsize;
459 for (i = view->ndim-2; i >= 0; i--)
460 view->strides[i] = view->strides[i+1] * view->shape[i+1];
465 init_fortran_strides_from_shape(Py_buffer *view)
469 assert(view->ndim > 0);
471 view->strides[0] = view->itemsize;
472 for (i = 1; i < view->ndim; i++)
473 view->strides[i] = view->strides[i-1] * view->shape[i-1];
581 init_len(Py_buffer *view)
586 for (i = 0; i < view->ndim; i++)
587 len *= view->shape[i];
588 len *= view->itemsize;
590 view->len = len;
597 const Py_buffer *view = &mv->view;
600 switch (view->ndim) {
606 if (MV_CONTIGUOUS_NDIM1(view))
610 if (PyBuffer_IsContiguous(view, 'C'))
612 if (PyBuffer_IsContiguous(view, 'F'))
617 if (view->suboffsets) {
641 mv->view.ndim = ndim;
642 mv->view.shape = mv->ob_array;
643 mv->view.strides = mv->ob_array + ndim;
644 mv->view.suboffsets = mv->ob_array + 2 * ndim;
679 dest = &mv->view;
692 /* Register an incomplete view: shape, strides, suboffsets and flags still
713 dest = &mv->view;
723 /* Expose a raw memory area as a view of contiguous bytes. flags can be
724 PyBUF_READ or PyBUF_WRITE. view->format is set to "B" (unsigned bytes).
793 return mbuf_add_view(mv->mbuf, &mv->view);
871 dest = &mv->view;
922 Py_buffer *view;
931 view = &mv->view;
932 if (buffertype == PyBUF_WRITE && view->readonly) {
939 if (PyBuffer_IsContiguous(view, order))
950 ret = memory_from_contiguous_copy(view, order);
978 Py_buffer view;
992 "PyBuffer_ToContiguous: len != view->len");
1007 fb->view.ndim = src->ndim;
1008 fb->view.shape = fb->array;
1009 fb->view.strides = fb->array + src->ndim;
1010 fb->view.suboffsets = fb->array + 2 * src->ndim;
1012 init_shared_values(&fb->view, src);
1013 init_shape_strides(&fb->view, src);
1014 init_suboffsets(&fb->view, src);
1016 src = &fb->view;
1192 input array. Thus, view->len must be a multiple of the new itemsize. */
1196 Py_buffer *view = &mv->view;
1202 assert(view->ndim >= 1);
1203 assert(Py_SIZE(mv) == 3*view->ndim);
1204 assert(view->shape == mv->ob_array);
1205 assert(view->strides == mv->ob_array + view->ndim);
1206 assert(view->suboffsets == mv->ob_array + 2*view->ndim);
1220 if ((get_native_fmtchar(&srcchar, view->format) < 0 ||
1226 if (view->len % itemsize) {
1232 view->format = (char *)get_native_fmtstr(PyBytes_AS_STRING(asciifmt));
1233 if (view->format == NULL) {
1239 view->itemsize = itemsize;
1241 view->ndim = 1;
1242 view->shape[0] = view->len / view->itemsize;
1243 view->strides[0] = view->itemsize;
1244 view->suboffsets = NULL;
1298 Py_buffer *view = &mv->view;
1301 assert(view->ndim == 1); /* ndim from cast_to_1D() */
1303 assert(view->shape == mv->ob_array);
1304 assert(view->strides == mv->ob_array + (ndim==0?1:ndim));
1305 assert(view->suboffsets == NULL);
1307 view->ndim = ndim;
1308 if (view->ndim == 0) {
1309 view->shape = NULL;
1310 view->strides = NULL;
1311 len = view->itemsize;
1314 len = copy_shape(view->shape, shape, ndim, view->itemsize);
1317 init_strides_from_shape(view);
1320 if (view->len != len) {
1334 Py_buffer *view = &mv->view;
1337 for (i = 0; i < view->ndim; i++)
1338 if (view->shape[i] == 0)
1345 Cast a copy of 'self' to a different view. The input view must
1346 be C-contiguous. The function always casts the input view to a
1350 If 'shape' is given, the 1-D view from the previous step will
1351 be cast to a C-contiguous view with new shape and strides.
1380 if ((shape || self->view.ndim != 1) && zero_in_shape(self)) {
1382 "memoryview: cannot cast view with zeros in shape or strides");
1394 if (self->view.ndim != 1 && ndim != 1) {
1402 mbuf_add_incomplete_view(self->mbuf, &self->view, ndim==0 ? 1 : (int)ndim);
1432 self = (PyMemoryViewObject *) mbuf_add_view(self->mbuf, &self->view);
1434 self->view.readonly = 1;
1445 memory_getbuf(PyMemoryViewObject *self, Py_buffer *view, int flags)
1447 Py_buffer *base = &self->view;
1453 *view = *base;
1454 view->obj = NULL;
1463 view->itemsize is the _previous_ itemsize. If shape is present,
1467 view->format = NULL;
1496 view->strides = NULL;
1501 if (view->format != NULL) {
1511 view->ndim = 1;
1512 view->shape = NULL;
1516 view->obj = (PyObject *)self;
1517 Py_INCREF(view->obj);
1524 memory_releasebuf(PyMemoryViewObject *self, Py_buffer *view)
1528 /* PyBuffer_Release() decrements view->obj after this function returns. */
2053 adjust_fmt(const Py_buffer *view)
2057 fmt = (view->format[0] == '@') ? view->format+1 : view->format;
2062 "memoryview: unsupported format %s", view->format);
2140 const Py_buffer *view = &self->view;
2145 fmt = adjust_fmt(view);
2148 if (view->ndim == 0) {
2149 return unpack_single(self, view->buf, fmt);
2151 else if (view->ndim == 1) {
2152 return tolist_base(self, view->buf, view->shape,
2153 view->strides, view->suboffsets,
2157 return tolist_rec(self, view->buf, view->ndim, view->shape,
2158 view->strides, view->suboffsets,
2283 lookup_dimension(const Py_buffer *view, char *ptr, int dim, Py_ssize_t index)
2287 assert(view->shape);
2288 assert(view->strides);
2290 nitems = view->shape[dim];
2300 ptr += view->strides[dim] * index;
2302 ptr = ADJUST_PTR(ptr, view->suboffsets, dim);
2309 ptr_from_index(const Py_buffer *view, Py_ssize_t index)
2311 char *ptr = (char *)view->buf;
2312 return lookup_dimension(view, ptr, 0, index);
2317 ptr_from_tuple(const Py_buffer *view, PyObject *tup)
2319 char *ptr = (char *)view->buf;
2322 if (nindices > view->ndim) {
2324 "cannot index %zd-dimension view with %zd-element tuple",
2325 view->ndim, nindices);
2335 ptr = lookup_dimension(view, ptr, (int)dim, index);
2342 /* Return the item at index. In a one-dimensional view, this is an object
2343 with the type specified by view->format. Otherwise, the item is a sub-view.
2348 Py_buffer *view = &(self->view);
2353 fmt = adjust_fmt(view);
2357 if (view->ndim == 0) {
2361 if (view->ndim == 1) {
2362 char *ptr = ptr_from_index(view, index);
2377 Py_buffer *view = &(self->view);
2384 fmt = adjust_fmt(view);
2388 if (nindices < view->ndim) {
2393 ptr = ptr_from_tuple(view, tup);
2473 Py_buffer *view;
2474 view = &(self->view);
2478 if (view->ndim == 0) {
2480 const char *fmt = adjust_fmt(view);
2483 return unpack_single(self, view->buf, fmt);
2506 sliced = (PyMemoryViewObject *)mbuf_add_view(self->mbuf, view);
2510 if (init_slice(&sliced->view, key, 0) < 0) {
2514 init_len(&sliced->view);
2535 Py_buffer *view = &(self->view);
2542 fmt = adjust_fmt(view);
2546 if (view->readonly) {
2554 if (view->ndim == 0) {
2557 ptr = (char *)view->buf;
2569 if (1 < view->ndim) {
2577 ptr = ptr_from_index(view, index);
2583 if (PySlice_Check(key) && view->ndim == 1) {
2584 Py_buffer dest; /* sliced view */
2592 dest = *view;
2593 dest.shape = &arrays[0]; dest.shape[0] = view->shape[0];
2594 dest.strides = &arrays[1]; dest.strides[0] = view->strides[0];
2595 if (view->suboffsets) {
2596 dest.suboffsets = &arrays[2]; dest.suboffsets[0] = view->suboffsets[0];
2611 if (PyTuple_GET_SIZE(key) < view->ndim) {
2616 ptr = ptr_from_tuple(view, key);
2638 return self->view.ndim == 0 ? 1 : self->view.shape[0];
2948 Py_buffer *view = &self->view;
2949 char *mem = view->buf;
2955 if (!view->readonly) {
2960 ret = get_native_fmtchar(&fmt, view->format);
2966 if (view->obj != NULL && PyObject_Hash(view->obj) == -1) {
2972 mem = PyMem_Malloc(view->len);
2977 if (buffer_to_contiguous(mem, view, 'C') < 0) {
2984 self->hash = _Py_HashBytes(mem, view->len);
2986 if (mem != view->buf)
3025 Py_buffer *view = &self->view;
3028 if (view->obj == NULL) {
3031 Py_INCREF(view->obj);
3032 return view->obj;
3039 return PyLong_FromSsize_t(self->view.len);
3046 return PyUnicode_FromString(self->view.format);
3053 return PyLong_FromSsize_t(self->view.itemsize);
3060 return _IntTupleFromSsizet(self->view.ndim, self->view.shape);
3067 return _IntTupleFromSsizet(self->view.ndim, self->view.strides);
3074 return _IntTupleFromSsizet(self->view.ndim, self->view.suboffsets);
3081 return PyBool_FromLong(self->view.readonly);
3088 return PyLong_FromLong(self->view.ndim);
3123 " for each element in the view.");
3212 Py_buffer *view = &(seq->view);
3213 char *ptr = (char *)seq->view.buf;
3215 ptr += view->strides[0] * it->it_index++;
3216 ptr = ADJUST_PTR(ptr, view->suboffsets, 0);
3236 int ndims = obj->view.ndim;
3247 const char *fmt = adjust_fmt(&obj->view);