Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cuspaceflight/magicmemoryview
Magic memoryview() style casting for Cython
https://github.com/cuspaceflight/magicmemoryview
Last synced: about 2 months ago
JSON representation
Magic memoryview() style casting for Cython
- Host: GitHub
- URL: https://github.com/cuspaceflight/magicmemoryview
- Owner: cuspaceflight
- Created: 2014-08-03T11:29:18.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2014-08-10T12:19:42.000Z (over 10 years ago)
- Last Synced: 2024-08-06T05:36:32.771Z (5 months ago)
- Language: Python
- Size: 175 KB
- Stars: 3
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.rst
Awesome Lists containing this project
README
A helper / hack to allow us to cast a ``mmap.mmap`` or other buffer to
a Cython pointer of the correct type.Cython is capable of casting a lot of things to a C pointer of the
correct type, especially with the aid of ``memoryview``. However,
in Python 2, ``memoryview`` lacks the ``memoryview.cast`` method
(so Cython won't let us change the dimensions of the array). Further,
both Python 2 and 3 require the memory map to be writable (making
the pointer type ``const`` does not seem to help here either).This class takes a (possibly read-only) memmap object, and produces a
Python object with a ``__getbuffer__`` method that returns The Right Thing.
*It pretends that the underlying buffer is writable* to make Cython
happy. If you give it a read-only buffer, and try to write to the result,
then you will have a bad time.When a Python object is cast by Cython to a pointer, it holds a
reference to the underlying Python object in order to prevent the
memory to which it refers being garbage collected. The ``MagicMemoryView``
in turn keeps a reference to the underlying data, so everything should
behave as expected.Usage::
from magicmemoryview import MagicMemoryView
cdef double data[:, :, :]
data = MagicMemoryView(source_buffer, (24, 12, 25), "d")