|
#include <stdio.h> |
|
#include <Python.h> |
|
|
|
// Module method definitions |
|
static PyObject* hello_world(PyObject *self, PyObject *args) { |
|
printf("Hello, world!\n"); |
|
Py_RETURN_NONE; |
|
} |
|
|
|
static PyObject* hello(PyObject *self, PyObject *args) { |
|
const char* name; |
|
if (!PyArg_ParseTuple(args, "s", &name)) { |
|
return NULL; |
|
} |
|
|
|
printf("Hello, %s!\n", name); |
|
Py_RETURN_NONE; |
|
} |
|
|
|
// Method definition object for this extension, these argumens mean: |
|
// ml_name: The name of the method |
|
// ml_meth: Function pointer to the method implementation |
|
// ml_flags: Flags indicating special features of this method, such as |
|
// accepting arguments, accepting keyword arguments, being a |
|
// class method, or being a static method of a class. |
|
// ml_doc: Contents of this method's docstring |
|
static PyMethodDef hello_methods[] = { |
|
{ |
|
"hello_world", hello_world, METH_NOARGS, |
|
"Print 'hello world' from a method defined in a C extension." |
|
}, |
|
{ |
|
"hello", hello, METH_VARARGS, |
|
"Print 'hello xxx' from a method defined in a C extension." |
|
}, |
|
{NULL, NULL, 0, NULL} |
|
}; |
|
|
|
// Module definition |
|
// The arguments of this structure tell Python what to call your extension, |
|
// what it's methods are and where to look for it's method definitions |
|
static struct PyModuleDef hello_definition = { |
|
PyModuleDef_HEAD_INIT, |
|
"hello", |
|
"A Python module that prints 'hello world' from C code.", |
|
-1, |
|
hello_methods |
|
}; |
|
|
|
// Module initialization |
|
// Python calls this function when importing your extension. It is important |
|
// that this function is named PyInit_[[your_module_name]] exactly, and matches |
|
// the name keyword argument in setup.py's setup() call. |
|
PyMODINIT_FUNC PyInit_hello(void) { |
|
Py_Initialize(); |
|
return PyModule_Create(&hello_definition); |
|
} |
It's working good.
Hi ...i am not very familiar with c extension for python.I have some array calculation coding with c extension.but That's not working fine .am got some error when compile that code .anyone can help me...
I am currently trying to implement array multiplication with some formula in c .but don't really know how I would create empty array with input dimension and how to return from c function to extension main function.
My c code return array to main function.
#include "chie.h"
double chie(double m, double b, double *x, double *y, double *yerr, int N,double *result) {
int n;
double diff;
//double result = 0.0;
//static double result[5];
for (n = 0; n < N; n++) {
diff = (y[n] - (m * x[n] + b)) / yerr[n];
result[n]= diff * diff;
}
}
then how to i catch the c array returned data to empty array.
this is my c extension main code.
#include <Python.h>
#include <numpy/arrayobject.h>
#include "chie.h"
#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION
static char module_docstring[] =
"This module provides an interface for calculating chi-squared using C.";
static char chie_docstring[] =
"Calculate the chi-squared of some data given a model.";
static PyObject *chi2_chi2(PyObject *self, PyObject *args);
static PyObject *chi2_chi2(PyObject *self, PyObject *args)
{
double m, b;
PyObject *x_obj, *y_obj, *yerr_obj;
double *result[5];
}
static PyMethodDef module_methods[] = {
{"chie", chi2_chi2, METH_VARARGS, chie_docstring},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef cieModule = {
PyModuleDef_HEAD_INIT,
"cieModule",
"example Module",
-1,
module_methods
};
/*PyMODINIT_FUNC PyInit_myexamp_Module(void)
{
return PyModule_Create(&myexamp_Module);
import_array();
}
*/
PyMODINIT_FUNC PyInit_cieModule(void)
{
PyObject *m;
m = PyModule_Create(&cieModule);
if (!m) {
return NULL;
}
import_array();
return m;
}