www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - Calling D and Mir functions for Python and NumPy

To call D functions from python, especially to support mir 
ndslice and numpy ndarray, I'm making a new library 
"mir-pybuffer". The pybuffer is python's official C struct to 
support writing C extensions of numpy-like ndarray. The 
mir-pybuffer generates functions automatically to convert 
mir.ndslice.Slice from/into PyBuffer functions by UDA and mixin 
as follows:

(D side)

import mir.ndslice : Slice, Contiguous;
import pybuffer : pybuffer, MixinPyBufferWrappers;

void func1(Slice!(Contiguous, [2LU], double*) mat, 
Slice!(Contiguous, [1LU], double*) vec, double a) {
   mat[0][] += vec;
   vec[] *= a;

mixin MixinPyBufferWrappers;

(Python side)

import ctypes
import numpy
import pybuffer

x = numpy.array([[0, 1, 2], [3, 4, 5]]).astype(numpy.float64)
y = numpy.array([0, 1, 2]).astype(numpy.float64)

lib = pybuffer.CDLL("./libyour-D-lib.so")
lib.func1(x, y, ctypes.c_double(2.0))

- example 
- DUB https://pypi.org/project/pybuffer/
- PyPI https://code.dlang.org/packages/mir-pybuffer

Enjoy extending your numpy scripts with D and Mir. Bug report and 
pull request are welcome!
May 01 2018