Lines Matching refs:base

52 /* User configurable flags for each base buffer */
53 #define ND_WRITABLE 0x002 /* mark base buffer as writable */
60 /* Internal flags for the base buffer */
84 /* Single node of a list of base buffers. The list is needed to implement
95 int flags; /* capabilities of the base buffer */
97 Py_buffer base; /* base buffer */
104 ndbuf_t *head; /* currently active base buffer */
112 Py_buffer *base;
147 base = &ndbuf->base;
148 base->obj = NULL;
149 base->buf = ndbuf->data;
150 base->len = len;
151 base->itemsize = 1;
152 base->readonly = 0;
153 base->format = NULL;
154 base->ndim = 1;
155 base->shape = NULL;
156 base->strides = NULL;
157 base->suboffsets = NULL;
158 base->internal = ndbuf;
166 Py_buffer *base = &ndbuf->base;
169 PyMem_XFree(base->format);
170 PyMem_XFree(base->shape);
171 PyMem_XFree(base->strides);
172 PyMem_XFree(base->suboffsets);
226 Py_buffer *base = &self->head->base;
228 PyMem_XFree(base->shape);
229 PyMem_XFree(base->strides);
230 PyMem_XFree(base->suboffsets);
232 PyBuffer_Release(base);
245 Py_buffer *base = &nd->staticbuf.base;
247 if (PyObject_GetBuffer(exporter, base, flags) < 0)
258 nd->head->flags = base->readonly ? 0 : ND_WRITABLE;
267 if (ndbuf->base.ndim == 0)
269 if (ndbuf->base.suboffsets)
271 if (PyBuffer_IsContiguous(&ndbuf->base, 'C'))
273 if (PyBuffer_IsContiguous(&ndbuf->base, 'F'))
662 Py_buffer *base = &nd->head->base;
663 Py_ssize_t *shape = base->shape;
664 Py_ssize_t *strides = base->strides;
669 char *fmt = base->format;
671 base = &nd->head->base;
681 assert(base->strides == NULL);
682 assert(base->ndim <= 1);
684 shape[0] = base->len;
686 strides[0] = base->itemsize;
708 item = PyMem_Malloc(base->itemsize);
714 mview = PyMemoryView_FromMemory(item, base->itemsize, PyBUF_WRITE);
718 lst = unpack_rec(unpack_from, base->buf, mview, item,
719 shape, strides, base->suboffsets,
720 base->ndim, base->itemsize);
727 if (strides != base->strides && strides != simple_strides)
760 | base.obj | OK (NULL) | OK | OK |
762 | base.buf | PTR | PTR | OK |
764 | base.len | len(data) | len(data) | OK |
766 | base.itemsize | 1 | OK | OK |
768 | base.readonly | 0 | OK | OK |
770 | base.format | NULL | OK | OK |
772 | base.ndim | 1 | 1 | OK |
774 | base.shape | NULL | NULL | OK |
776 | base.strides | NULL | NULL | OK |
778 | base.suboffsets | NULL | NULL | OK |
780 | base.internal | OK | OK | OK |
826 Py_buffer *base = &ndbuf->base;
829 mview = PyMemoryView_FromBuffer(base);
838 base->readonly = !(ndbuf->flags & ND_WRITABLE);
839 base->itemsize = itemsize;
840 base->format = get_format(format);
841 if (base->format == NULL)
889 const Py_buffer *base = &ndbuf->base;
892 s = PyMem_Malloc(base->ndim * (sizeof *s));
899 s[0] = base->itemsize;
900 for (i = 1; i < base->ndim; i++)
901 s[i] = s[i-1] * base->shape[i-1];
904 s[base->ndim-1] = base->itemsize;
905 for (i = base->ndim-2; i >= 0; i--)
906 s[i] = s[i+1] * base->shape[i+1];
1032 Py_buffer *base = &ndbuf->base;
1039 assert(base->ndim > 0);
1040 assert(base->suboffsets == NULL);
1043 addsize = base->shape[0] * (sizeof (char *));
1059 base->buf = ndbuf->data;
1065 for (n = 0; n < base->ndim; n++) {
1066 if (base->shape[n] == 0)
1068 if (base->strides[n] <= 0) {
1069 Py_ssize_t x = (base->shape[n]-1) * base->strides[n];
1077 step = base->strides[0] < 0 ? -base->strides[0] : base->strides[0];
1079 for (n = 0; n < base->shape[0]; n++)
1080 ((char **)base->buf)[n] = (char *)base->buf + start + n*step;
1083 base->suboffsets = PyMem_Malloc(base->ndim * (sizeof *base->suboffsets));
1084 if (base->suboffsets == NULL) {
1088 base->suboffsets[0] = suboffset0;
1089 for (n = 1; n < base->ndim; n++)
1090 base->suboffsets[n] = -1;
1093 if (base->strides[0] >= 0) {
1094 base->strides[0] = sizeof(char *);
1098 base->strides[0] = -(Py_ssize_t)sizeof(char *);
1099 if (base->shape[0] > 0)
1100 base->buf = (char *)base->buf + (base->shape[0]-1) * sizeof(char *);
1109 init_len(Py_buffer *base)
1113 base->len = 1;
1114 for (i = 0; i < base->ndim; i++)
1115 base->len *= base->shape[i];
1116 base->len *= base->itemsize;
1123 Py_buffer *base = &ndbuf->base;
1125 base->ndim = (int)ndim;
1137 base->shape = seq_as_ssize_array(shape, ndim, 1);
1138 if (base->shape == NULL)
1143 base->strides = seq_as_ssize_array(strides, ndim, 0);
1146 base->strides = strides_from_shape(ndbuf, ndbuf->flags);
1148 if (base->strides == NULL)
1150 if (verify_structure(base->len, base->itemsize, ndbuf->offset,
1151 base->shape, base->strides, ndim) < 0)
1155 base->buf = ndbuf->data + ndbuf->offset;
1158 init_len(base);
1161 if (PyBuffer_IsContiguous(base, 'C'))
1163 if (PyBuffer_IsContiguous(base, 'F'))
1169 /* modifies base->buf, base->strides and base->suboffsets **/
1262 /* initialize and push a new base onto the linked list */
1286 PyObject *v = NULL; /* initializer: scalar, list, tuple or base object */
1291 int flags = ND_DEFAULT; /* base buffer and ndarray flags */
1321 /* NDArrayObject is the original base object. */
1340 /* Initialize and push the first base buffer onto the linked list. */
1344 /* Push an additional base onto the linked list. */
1357 int flags = ND_DEFAULT; /* base buffer flags */
1386 /* Pop a base from the linked list (if possible). */
1404 "list only has a single base");
1420 Py_buffer *base = &ndbuf->base;
1424 if (base->obj != NULL && (baseflags&ND_REDIRECT)) {
1425 return PyObject_GetBuffer(base->obj, view, flags);
1429 *view = *base;
1436 if (base->ndim != 0 &&
1437 ((REQ_SHAPE(flags) && base->shape == NULL) ||
1438 (REQ_STRIDES(flags) && base->strides == NULL))) {
1455 if (REQ_WRITABLE(flags) && base->readonly) {
1499 so base->buf = ndbuf->data. */
1555 ptr_from_index(Py_buffer *base, Py_ssize_t index)
1560 if (base->shape)
1561 nitems = base->shape[0];
1563 assert(base->ndim == 1 && SIMPLE_FORMAT(base->format));
1564 nitems = base->len;
1575 ptr = (char *)base->buf;
1577 if (base->strides == NULL)
1578 ptr += base->itemsize * index;
1580 ptr += base->strides[0] * index;
1582 ptr = ADJUST_PTR(ptr, base->suboffsets);
1591 Py_buffer *base = &ndbuf->base;
1594 if (base->ndim == 0) {
1599 ptr = ptr_from_index(base, index);
1603 if (base->ndim == 1) {
1604 return unpack_single(ptr, base->format, base->itemsize);
1619 subview = &nd->staticbuf.base;
1712 init_slice(Py_buffer *base, PyObject *key, int dim)
1719 slicelength = PySlice_AdjustIndices(base->shape[dim], &start, &stop, step);
1722 if (base->suboffsets == NULL || dim == 0) {
1724 base->buf = (char *)base->buf + base->strides[dim] * start;
1728 while (n >= 0 && base->suboffsets[n] < 0)
1732 base->suboffsets[n] = base->suboffsets[n] + base->strides[dim] * start;
1734 base->shape[dim] = slicelength;
1735 base->strides[dim] = base->strides[dim] * step;
1741 copy_structure(Py_buffer *base)
1746 shape = PyMem_Malloc(base->ndim * (sizeof *shape));
1747 strides = PyMem_Malloc(base->ndim * (sizeof *strides));
1752 if (base->suboffsets) {
1753 suboffsets = PyMem_Malloc(base->ndim * (sizeof *suboffsets));
1758 for (i = 0; i < base->ndim; i++) {
1759 shape[i] = base->shape[i];
1760 strides[i] = base->strides[i];
1762 suboffsets[i] = base->suboffsets[i];
1765 base->shape = shape;
1766 base->strides = strides;
1767 base->suboffsets = suboffsets;
1784 Py_buffer *base = &self->head->base;
1786 if (base->ndim == 0) {
1788 return unpack_single(base->buf, base->format, base->itemsize);
1818 base = &ndbuf->base;
1819 if (copy_structure(base) < 0) {
1827 if (init_slice(base, key, 0) < 0)
1840 if (init_slice(base, key, (int)i) < 0)
1848 init_len(base);
1868 Py_buffer *dest = &self->head->base;
1912 dest = &nd->head->base;
2019 Py_buffer *base = &self->head->base;
2021 if (base->obj == NULL) {
2024 Py_INCREF(base->obj);
2025 return base->obj;
2031 Py_buffer *base = &self->head->base;
2032 return PyLong_FromSsize_t(base->len);
2038 Py_buffer *base = &self->head->base;
2039 return PyBool_FromLong(base->readonly);
2045 Py_buffer *base = &self->head->base;
2046 return PyLong_FromSsize_t(base->itemsize);
2052 Py_buffer *base = &self->head->base;
2053 const char *fmt = base->format ? base->format : "";
2060 Py_buffer *base = &self->head->base;
2061 return PyLong_FromSsize_t(base->ndim);
2067 Py_buffer *base = &self->head->base;
2068 return ssize_array_as_tuple(base->shape, base->ndim);
2074 Py_buffer *base = &self->head->base;
2075 return ssize_array_as_tuple(base->strides, base->ndim);
2081 Py_buffer *base = &self->head->base;
2082 return ssize_array_as_tuple(base->suboffsets, base->ndim);
2089 int ret = PyBuffer_IsContiguous(&nd->head->base, 'C');
2103 int ret = PyBuffer_IsContiguous(&nd->head->base, 'F');
2117 int ret = PyBuffer_IsContiguous(&nd->head->base, 'A');
2133 /* ndbuf.base */
2159 Py_buffer *src = &ndbuf->base;
2199 Py_buffer *base = &nd->head->base;
2202 if (base->suboffsets != NULL) {
2207 if (base->strides == NULL) {
2213 base->suboffsets = PyMem_Malloc(base->ndim * (sizeof *base->suboffsets));
2214 if (base->suboffsets == NULL) {
2219 for (i = 0; i < base->ndim; i++)
2220 base->suboffsets[i] = -1;
2235 const Py_buffer *view = &nd->head->base;
2572 Py_buffer view, *base;
2586 base = &((NDArrayObject *)obj)->head->base;
2587 ret = PyBuffer_IsContiguous(base, ord) ? Py_True : Py_False;
2608 const Py_buffer *view = &nd->head->base;