def _get_buffer(self, view, flags):
from ctypes import addressof
if (flags & PyBUF_WRITABLE) == PyBUF_WRITABLE and self.readonly:
raise BufferError("buffer is read-only")
if ((flags & PyBUF_C_CONTIGUOUS) == PyBUF_C_CONTIGUOUS and
not self.is_contiguous('C')):
raise BufferError("data is not C contiguous")
if ((flags & PyBUF_F_CONTIGUOUS) == PyBUF_F_CONTIGUOUS and
not self.is_contiguous('F')):
raise BufferError("data is not F contiguous")
if ((flags & PyBUF_ANY_CONTIGUOUS) == PyBUF_ANY_CONTIGUOUS and
not self.is_contiguous('A')):
raise BufferError("data is not contiguous")
view.buf = self.buf
view.readonly = self.readonly
view.len = self.len
if flags | PyBUF_WRITABLE == PyBUF_WRITABLE:
view.ndim = 0
else:
view.ndim = self.ndim
view.itemsize = self.itemsize
if (flags & PyBUF_FORMAT) == PyBUF_FORMAT:
view.format = addressof(self._format)
else:
view.format = None
if (flags & PyBUF_ND) == PyBUF_ND:
view.shape = addressof(self._shape)
elif self.is_contiguous('C'):
view.shape = None
else:
raise BufferError(
"shape required for {} dimensional data".format(self.ndim))
if (flags & PyBUF_STRIDES) == PyBUF_STRIDES:
view.strides = ctypes.addressof(self._strides)
elif view.shape is None or self.is_contiguous('C'):
view.strides = None
else:
raise BufferError("strides required for none C contiguous data")
view.suboffsets = None
view.internal = None
view.obj = self
评论列表
文章目录