chiark / gitweb /
fixed(?) python interface
authorstevenj <stevenj@alum.mit.edu>
Fri, 11 Jun 2010 04:12:12 +0000 (00:12 -0400)
committerstevenj <stevenj@alum.mit.edu>
Fri, 11 Jun 2010 04:12:12 +0000 (00:12 -0400)
darcs-hash:20100611041212-c8de0-a7d26c0ef81f5db2b808c69fed034cbabacece4d.gz

swig/nlopt-python.i
swig/nlopt.i

index cbfe99c532b4f8c2422772c59237b7730474f04a..05570f141c8cf7b0c495218f26a5e108bd215df0 100644 (file)
@@ -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<double*>(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;
index c5054e2fc1372b71390a4587171bbfcf1bdd155e..cb8378602b2a43f98b9fd5c42899fc77fb560ac0 100644 (file)
@@ -9,6 +9,7 @@ namespace std {
   %template(nlopt_doublevector) vector<double>;
 };
 
+#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"