I am writing a Python module that includes Cython extensions and uses LAPACK (and BLAS ). I am open to using clapack or lapacke or some f2c or f2py solution if necessary. The important thing is that I can call LAPACK and BLAS routines from Cython in narrow loops without Python overheads.
I found one example here . However, this example is dependent on SAGE. I want my module to be installed without installing SAGE, as my users are unlikely to want or need SAGE for anything else. My users are likely to have packages like numpy, scipy, pandas and scikit learn, so they will be reasonable dependencies. What is the optimal combination of interfaces to use, and what would the minimal setup.py file look like, could you get the necessary information (from numpy, scipy, etc.) to compile?
EDIT: This is what I ended up doing. It works on my macbook, but I have no idea how portable it is. Of course, the best way.
from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext import numpy from Cython.Build import cythonize from numpy.distutils.system_info import get_info
This works because on my macbook, the clapack.h header file is in the same directory as cblas.h . I can do this in my pyx file:
ctypedef np.int32_t integer cdef extern from "cblas.h": double cblas_dnrm2(int N,double *X, int incX) cdef extern from "clapack.h": integer dgelsy_(integer *m, integer *n, integer *nrhs, double *a, integer *lda, double *b, integer *ldb, integer * jpvt, double *rcond, integer *rank, double *work, integer * lwork, integer *info)
python numpy blas cython lapack
jcrudy Feb 13 '13 at 22:58 2013-02-13 22:58
source share