devel_numcpp_cpp_api_cython#

C++ language mode#

Cython template that compiles in C++ mode.

# distutils: language=c++
# cython: language_level=3
"""Developer Cython template: C++ language mode.

This template sets `language=c++` via distutils directive.
"""

cdef extern from "math.h":
    double sqrt(double)


def hypot(double a, double b):
    return sqrt(a*a + b*b)

C++ prefix sums (Cython)#

C++ vector with memoryview input.

# distutils: language = c++
# cython: language_level=3

"""Devel Cython template: C++ + memoryview interop."""

from libcpp.vector cimport vector


def prefix_sums(double[:] x):
    cdef Py_ssize_t i
    cdef vector[double] out
    out.reserve(x.shape[0])
    cdef double s = 0.0
    for i in range(x.shape[0]):
        s += x[i]
        out.push_back(s)
    # Return as Python list for portability
    return [out[i] for i in range(out.size())]

Devel NumPy+C++: memoryview#

C++ mode + memoryview + std::vector.

# cython: language_level=3
# distutils: language=c++
"""Devel NumPy+C++ Cython template.

Demonstrates C++ compilation mode and a typed memoryview. This template does
not require cimporting NumPy; it works with objects supporting the buffer
protocol. Use NumPy arrays for best performance.
"""

from libcpp.vector cimport vector


def prefix_sums(double[:] x):
    """Return prefix sums as a Python list."""
    cdef Py_ssize_t i, n = x.shape[0]
    cdef vector[double] v
    v.reserve(n)
    cdef double s = 0.0
    for i in range(n):
        s += x[i]
        v.push_back(s)
    return [v[i] for i in range(v.size())]

C++ std::vector demo#

# distutils: language = c++
# cython: language_level=3
"""
C++ std::vector interop demo (compile as C++).

This template is for advanced users; it requires a C++ compiler.
"""
from libcpp.vector cimport vector

cpdef int vector_size():
    cdef vector[int] v
    v.push_back(1)
    v.push_back(2)
    return <int>v.size()

C++ std::vector demo#

# distutils: language = c++
# cython: language_level=3
"""
C++ std::vector interop demo (compile as C++).

This template is for advanced users; it requires a C++ compiler.
"""
from libcpp.vector cimport vector

cpdef int vector_size():
    cdef vector[int] v
    v.push_back(1)
    v.push_back(2)
    return <int>v.size()