File: _demo.pyx

package info (click to toggle)
python-awkward 2.8.9-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 24,932 kB
  • sloc: python: 178,875; cpp: 33,828; sh: 432; makefile: 21; javascript: 8
file content (35 lines) | stat: -rw-r--r-- 1,247 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# BSD 3-Clause License; see https://github.com/scikit-hep/awkward/blob/main/LICENSE

from demo_impl cimport ArrayBuffers, create_demo_array as create_demo_array_impl
from cython.operator cimport dereference as deref
from cython.view cimport array as cvarray

# Import both types and functions
cimport numpy as np
import numpy as np
import awkward as ak


cdef create_array_view(void* buffer, size_t nbytes):
    cdef cvarray view = <np.uint8_t[:nbytes]> buffer
    # When this view leaves scope, call `free` on the data
    # see https://github.com/cython/cython/blob/05f7a479f6417716b3de2a9559f2724013af6eba/Cython/Utility/MemoryView.pyx#L215
    view.free_data = True
    return np.asarray(view)


def create_demo_array():
    array_buffers = create_demo_array_impl()

    buffers = {}
    # Convert from raw buffers to NumPy arrays
    for it in array_buffers.buffers:
        # Pull out name, buffer, and lookup length of buffer
        name = it.first
        buffer = it.second
        nbytes = array_buffers.buffer_nbytes[name]

        # Create Cython array over buffer
        buffers[name.decode('UTF-8')] = create_array_view(buffer, nbytes)

    return ak.from_buffers(array_buffers.form.decode('UTF-8'), array_buffers.length, buffers)