[Numpy-discussion] calling multiarraymodule.c funcs from c api

John Hunter jdhunter at ace.bsd.uchicago.edu
Wed Oct 2 11:36:13 EDT 2002

I am new to numpy extension writing, and am trying to call some of the
functions defined in Numeric-21.3/Src/multiarraymodule.c, eg

  extern PyObject *PyArray_Correlate(PyObject *op1, PyObject *op2, int mode) 

in a Numeric extension module that I am writing.  

Are these functions available via the C API, and if so, how should I
go about accessing them?  Or are the only array functions defined in
Include/arrayobject.h available in the C API?

Below is my prototype module.  I am defining a function 'xcorr' that
just does what cross_correlate does, as a test case to see if I can
access the multiarray C API:

/* jdhscipy.c	--  Wed Oct  2 2002

#include "Python.h"
#include "Numeric/arrayobject.h"
#include "stdio.h"

static PyObject *ErrorObject;
extern PyObject *PyArray_Correlate(PyObject*, PyObject*, int);

static char xcorr__doc__[] = "";

static PyObject * xcorr(PyObject *self, PyObject *args) { 
    PyObject *shape, *a0;
    int mode=0;
    if (!PyArg_ParseTuple(args, "OO|i", &a0, &shape, &mode)) return NULL;
    return PyArray_Correlate(a0, shape, mode);

static struct PyMethodDef jdhscipy_methods[] = {
 {"xcorr",     xcorr,          1,      xcorr__doc__},
 {NULL,		NULL}		/* sentinel */

/* Initialization function for the module (*must* be called initjdhscipy) */

static char jdhscipy_module_documentation[] = 
"My first scipy extension"

DL_EXPORT(void) initjdhscipy(void)
	PyObject *m, *d;

	/* Create the module and add the functions */
	m = Py_InitModule4("jdhscipy", jdhscipy_methods,

	/* Import the array object */
	/* Add some symbolic constants to the module */
	d = PyModule_GetDict(m);
	ErrorObject = PyString_FromString("jdhscipy.error");
	PyDict_SetItemString(d, "error", ErrorObject);

	/* XXXX Add constants here */
	/* Check for errors */
	if (PyErr_Occurred())
		Py_FatalError("can't initialize module jdhscipy");

More information about the NumPy-Discussion mailing list