From b18d94e38f99ba484a3eb81dfd683f5645dfc37f Mon Sep 17 00:00:00 2001 From: Robert Bradshaw Date: Fri, 10 Dec 2010 15:15:44 -0800 Subject: [PATCH] Change numeric demo to numpy demo using new features, update setup.py. --- Demos/numeric_demo.pyx | 39 --------------------------------------- Demos/numpy_demo.pyx | 9 +++++++++ Demos/setup.py | 27 ++++++++++++--------------- 3 files changed, 21 insertions(+), 54 deletions(-) delete mode 100644 Demos/numeric_demo.pyx create mode 100644 Demos/numpy_demo.pyx diff --git a/Demos/numeric_demo.pyx b/Demos/numeric_demo.pyx deleted file mode 100644 index 3a20fd90..00000000 --- a/Demos/numeric_demo.pyx +++ /dev/null @@ -1,39 +0,0 @@ -# -# This example demonstrates how to access the internals -# of a Numeric array object. -# - -cdef extern from "Numeric/arrayobject.h": - - struct PyArray_Descr: - int type_num, elsize - char type - - ctypedef class Numeric.ArrayType [object PyArrayObject]: - cdef char *data - cdef int nd - cdef int *dimensions, *strides - cdef object base - cdef PyArray_Descr *descr - cdef int flags - -def print_2d_array(ArrayType a): - print "Type:", chr(a.descr.type) - if chr(a.descr.type) <> "f": - raise TypeError("Float array required") - if a.nd <> 2: - raise ValueError("2 dimensional array required") - cdef int nrows, ncols - cdef float *elems, x - nrows = a.dimensions[0] - ncols = a.dimensions[1] - elems = a.data - hyphen = "-" - divider = ("+" + 10 * hyphen) * ncols + "+" - print divider - for row in range(nrows): - for col in range(ncols): - x = elems[row * ncols + col] - print "| %8f" % x, - print "|" - print divider diff --git a/Demos/numpy_demo.pyx b/Demos/numpy_demo.pyx new file mode 100644 index 00000000..914cd030 --- /dev/null +++ b/Demos/numpy_demo.pyx @@ -0,0 +1,9 @@ +cimport numpy +import numpy + +def sum_of_squares(numpy.ndarray[double, ndim=1] arr): + cdef long N = arr.shape[0] + cdef double ss = 0 + for i in range(N): + ss += arr[i]**2 + return ss diff --git a/Demos/setup.py b/Demos/setup.py index 60cbeb81..4e592650 100644 --- a/Demos/setup.py +++ b/Demos/setup.py @@ -1,26 +1,23 @@ -import glob +# Run as: +# python setup.py build_ext --inplace from distutils.core import setup from distutils.extension import Extension -from Cython.Distutils import build_ext +from Cython.Build import cythonize +ext_modules = cythonize("*.pyx", exclude="numpy_*.pyx") + +# Only compile the following if numpy is installed. try: from numpy.distutils.misc_util import get_numpy_include_dirs - numpy_include_dirs = get_numpy_include_dirs() -except: - numpy_include_dirs = [] - -ext_modules=[ - Extension("primes", ["primes.pyx"]), - Extension("spam", ["spam.pyx"]), -] - -for file in glob.glob("*.pyx"): - if file != "numeric_demo.pyx": - ext_modules.append(Extension(file[:-4], [file], include_dirs = numpy_include_dirs)) + numpy_demo = Extension("*", + ["numpy_*.pyx"], + include_dirs=get_numpy_include_dirs()) + ext_modules.extend(cythonize(numpy_demo)) +except ImportError: + pass setup( name = 'Demos', - cmdclass = {'build_ext': build_ext}, ext_modules = ext_modules, ) -- 2.26.2