[python] LAPACK का उपयोग कर साइथन आधारित एक्सटेंशन वितरित करना


0 Answers

Question

मैं एक पायथन मॉड्यूल लिख रहा हूं जिसमें साइथन एक्सटेंशन शामिल हैं और LAPACK (और BLAS ) का उपयोग करता है। मैं clapack या lapacke , या यदि आवश्यक हो तो किसी प्रकार का f2c या f2py समाधान का उपयोग करने के लिए खुला हूं। महत्वपूर्ण बात यह है कि मैं पाइथन कॉल ओवरहेड के बिना सख्त लूप में lapack और lapack रूटीन कॉल करने में सक्षम हूं।

मुझे here एक उदाहरण मिला here । हालांकि, वह उदाहरण एसएजी पर निर्भर करता है। मैं चाहता हूं कि मेरा मॉड्यूल SAGE इंस्टॉल किए बिना इंस्टॉल करने योग्य हो, क्योंकि मेरे उपयोगकर्ता किसी और चीज़ के लिए एसएजी की आवश्यकता या आवश्यकता नहीं है। मेरे उपयोगकर्ताओं के पास numpy, scipy, pandas, और scikit सीखने जैसे संकुल होने की संभावना है, इसलिए वे उचित निर्भरताएं होंगी। उपयोग करने के लिए इंटरफेस का सबसे अच्छा संयोजन क्या है, और कम से कम setup.py फ़ाइल कैसा दिखता है जो संकलन के लिए आवश्यक जानकारी (numpy, scipy, आदि से) ला सकता है?

संपादित करें: यहां मैं क्या कर रहा हूं। यह मेरी मैकबुक पर काम करता है, लेकिन मुझे नहीं पता कि यह कितना पोर्टेबल है। निश्चित रूप से एक बेहतर तरीका है।

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

# TODO: This cannot be the right way
blas_include = get_info('blas_opt')['extra_compile_args'][1][2:]
includes = [blas_include,numpy.get_include()]

setup(
    cmdclass = {'build_ext': build_ext},
    ext_modules = cythonize([Extension("cylapack", ["cylapack.pyx"],
                                       include_dirs = includes,
                                       libraries=['blas','lapack'])
                   ])
)

यह काम करता है क्योंकि, मेरी मैकबुक पर, clapack.h शीर्षलेख फ़ाइल clapack.h के समान निर्देशिका में है। मैं इसे अपनी पीईएक्स फ़ाइल में कर सकता हूं:

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)



Related