From: stevenj Date: Fri, 11 Jun 2010 04:12:12 +0000 (-0400) Subject: fixed(?) python interface X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=9d697369550145cae7fe231bb02770b70c798f01;p=nlopt.git fixed(?) python interface darcs-hash:20100611041212-c8de0-a7d26c0ef81f5db2b808c69fed034cbabacece4d.gz --- diff --git a/swig/nlopt-python.i b/swig/nlopt-python.i index cbfe99c..05570f1 100644 --- a/swig/nlopt-python.i +++ b/swig/nlopt-python.i @@ -68,8 +68,9 @@ static double func_python(unsigned n, const double *x, double *grad, void *f) PyObject *xpy = PyArray_New(&PyArray_Type, 1, &sz, NPY_DOUBLE, &stride1, const_cast(x), // not NPY_WRITEABLE 0, NPY_C_CONTIGUOUS | NPY_ALIGNED, NULL); - PyObject *gradpy = grad ? PyArray_SimpleNew(1, &sz0, NPY_DOUBLE) - : PyArray_SimpleNewFromData(1, &sz, NPY_DOUBLE, grad); + PyObject *gradpy = grad + ? PyArray_SimpleNewFromData(1, &sz, NPY_DOUBLE, grad) + : PyArray_SimpleNew(1, &sz0, NPY_DOUBLE); PyObject *arglist = Py_BuildValue("OO", xpy, gradpy); PyObject *result = PyEval_CallObject((PyObject *) f, arglist); @@ -79,11 +80,12 @@ static double func_python(unsigned n, const double *x, double *grad, void *f) Py_DECREF(xpy); double val = HUGE_VAL; - if (SWIG_IsOK(SWIG_AsVal_double(result, &val))) { + if (result && PyFloat_Check(result)) { + val = PyFloat_AsDouble(result); Py_DECREF(result); } else { - Py_DECREF(result); + Py_XDECREF(result); throw std::invalid_argument("invalid result passed to nlopt"); } return val; diff --git a/swig/nlopt.i b/swig/nlopt.i index c5054e2..cb83786 100644 --- a/swig/nlopt.i +++ b/swig/nlopt.i @@ -9,6 +9,7 @@ namespace std { %template(nlopt_doublevector) vector; }; +#ifndef SWIGPYTHON %rename(nlopt_opt) nlopt::opt; %rename(nlopt_roundoff_limited) nlopt::roundoff_limited; %rename(nlopt_forced_stop) nlopt::forced_stop; @@ -17,6 +18,7 @@ namespace std { %rename(nlopt_version) nlopt::version; %rename(nlopt_algorithm_name) nlopt::algorithm_name; %include "nlopt-enum-renames.i" +#endif %include "nlopt-exceptions.i"